DEV Community

Discussion on: Clean up your code with these tips!

Collapse
 
lexlohr profile image
Alex Lohr • Edited

Three minor additions: you can omit the ternary in your case in favor of a logical gate and you should use /regex/.test(string) instead of string.match(/regex/) if you don't want to do anything with the result and lastly, you don't want domains like localhost.mydomain.com to be interpreted as secure, so better make sure that regex captures the whole domain string - so now it looks like this:

const hostnameAvailable = typeof window !== 'undefined'
    && window.hasOwnProperty('location')
    && window.location.hasOwnProperty('hostname');
const domain = hostnameAvailable && window.location.hostname;
const isLocal = domain && /^(?:localhost|127\.0\.0\.1)$/.test(domain);
const secure = !isLocal;

export default new Cookie({secure});

I would even think that using a direct comparison for the domain would be faster and more readable than the regex, so now it becomes:

const hostnameAvailable = typeof window !== 'undefined'
    && window.hasOwnProperty('location')
    && window.location.hasOwnProperty('hostname');
const domain = hostnameAvailable && window.location.hostname;
const isLocal = domain === 'localhost' || domain === '127.0.0.1';
const secure = !isLocal;

export default new Cookie({secure});
Collapse
 
dechamp profile image
DeChamp • Edited

Aw! you're so right! I should have used test vs match, also I should have added in $ for an exact match. I'll update this! Part of the fun was to show people they can resort to regex when doing multiple test against a single variable. If it was another scenario of checking the domain against lets say 3 or more possible values, then regex is a quick way to solve this.

Thank you for the great feed back.

Collapse
 
lexlohr profile image
Alex Lohr

You're welcome. I'm usually rather eager to solve things with regex myself. So I usually think again: "will a regex make that code better?" and try it without the regex. In ~50% of the cases, I keep the regex. For the sake of having an example, I feel it's justified. For live code, I would have removed it.

Thread Thread
 
dechamp profile image
DeChamp

I like your clear view on this. I agree that the regex is over kill when we are only checking two values.

Collapse
 
andrewharpin profile image
Andrew Harpin

While this obviously works, I personally don't like this style of code.

Ok it takes up less screen real estate, but it's operation is not obvious.

Fundamentally code is a document and a document is useless if it is difficult or impossible to read.

Collapse
 
lexlohr profile image
Alex Lohr

What is difficult to read it what is obvious to you strongly depends on what you're used to. Using logical gates is pretty common for example in Python.

So basically your judgement depends on your own bias for a certain style.