Я всегда нахожу захватывающим возможность получить свое решение в одной строке при работе с алгоритмами JavaScript. Это очень полезно, и код выглядит очень чистым и мощным. Однострочные не просты в обслуживании, но выглядят круто.

В этой статье мы рассмотрим некоторые интересные приемы стенографии JavaScript. Мне нравится называть это «делать больше с меньшим количеством JavaScript».

В этой статье мы рассмотрим как длинную, так и сокращенную версии.

1. Тернарный оператор

Тернарный оператор выполняет код на основе результата бинарного условия.

Он принимает двоичное условие в качестве входных данных, что делает его похожим на блок потока управления «если-иначе». Он также возвращает значение, ведя себя как метод.

От руки

const age = 20;
let result;
if (age > 18) {
    result = "Can stay for the night concert";
} else {
    result = "Go home!";
}

Строка

result = (age > 18) ? "Can stay for the night concert" : "Go home!";

Если вы хотите вложить цикл if,

const result = a > 18 ? "Can stay for the night concert" : a < 5? "Babies are not allowed" : "Go home!";

Так как это выглядит круто, давайте перейдем к нашей следующей технике.

2. Оценка короткого замыкания

Оценка короткого замыкания — это условие, при котором используется логический оператор. Он определяет, должен ли оператор принимать возвращаемое значение раньше (короткое замыкание). Это позволяет предотвратить ненужное выполнение кода.

В JavaScript есть три логических оператора:

  • Логическое И&&
  • Логическое ИЛИ||
  • Логично НЕ!

От руки

if (array1 !== null || array1 !== undefined || array1 !== '') {
     let array2 = array1;
}

Строка

const array2 = array1  || 'new';

Давайте посмотрим на другой классный пример

От руки

let dbHost;
if (process.env.DB_HOST) {
  dbHost = process.env.DB_HOST;
} else {
  dbHost = 'localhost';
}

Строка

const dbHost = process.env.DB_HOST || 'localhost';

3. Объявление переменных

Переменные обычно объявляются в верхней части функций, что, кстати, является хорошей практикой.

От руки

let node = head;
let prev = head.next;
let last = prev.next;

сокращенно

let node= head, prev= head.next, last= prev.next;

4. Стрелочные функции

Со стрелочными функциями легко работать, хотя их может быть немного сложно написать. Но они становятся менее подробными и запутанными, когда вы начинаете вкладывать их в вызовы других функций. Они делают наш код более кратким и упрощают область видимости.

От руки

function welcomeMessage (name) {
  console.log('Welcome', name);
}
setTimeout(function() {
  console.log('Loaded')
}, 3000);
list.forEach(function(item) {
  console.log(item);
});

Строка

welcomeMessage = name => console.log('Welcome', name);
setTimeout(() => console.log('Loaded'), 3000);
list.forEach(item => console.log(item));

5. Сокращение неявного возврата

Возврат — это ключевое слово, которое мы часто используем для возврата конечного результата функции.

От руки

const func = () => { return 'something'; }

Стенография

const func = () => 'something';

6. Сокращение оператора распространения

Оператор спреда позволяет расширять итерируемый объект там, где есть ноль или более аргументов. Это работает для элементов массива, парключ-значение для объектов.

От руки

const array1 = [a, b, c, d];
const array2 = [w, x, y, z];
function(array1, array2) {    
     for (const value of array2) {        
         array1.push(value);      
     }
}

Строка

const array1 = [a, b, c, d];
const array2 = [w, x, y, z];
function(array1, array2) return [ ...array1, ...array2 ];

7. Для сокращения цикла

Цикл For позволяет вам и перебирать элементы, работающие с ними по одному за раз.

От руки

const cars = ['Audi', 'Hyundai', 'Honda'];
for (let i = 0; i < cars.length; i++){
...}

сокращенно

const cars = ['Audi', 'Hyundai', 'Honda'];
for(let car of cars){...}

Если бы мы хотели получить доступ к машине по определенному индексу, то это было бы так:

for (let index of cars){...}

8. Сокращение свойств объекта

Es6 предоставляет более простой способ присвоения свойств объектам. Если имя переменной совпадает с ключом объекта, вы можете воспользоваться сокращенной записью

От руки

const x = start, y = end;
const obj = { x:x, y:y };

Строка

const obj = { x, y };

9. Сокращение присвоения свойств объекта

Объединение двух переменных может быть немного сложным. Рассмотрим код ниже

let fname = { firstName : 'John' };
let lname = { lastName : 'Doe'}

Чтобы объединить эти два оператора, в Es6 была введена функция Object.assign, которая создает новый объект без изменения существующих объектов.

let full_names = Object.assign(fname, lname);

Вы также можете использовать нотацию уничтожения объекта, введенную в ES8:

let full_names = {...fname, ...lname};

Назначение свойства объекта не имеет ограничений на количество свойств объекта, которые вы можете объединить, и значения всегда будут записываться в том порядке, в котором они были объединены, если нет объектов с тем же именем свойства.

10. Сокращение оператора побитового НЕ

Функция indexOf() используется для получения позиции искомого элемента при проверке существования значения в строке или массиве.

Если значение не найдено, возвращается значение -1. В JavaScript 0 считается «ложным», а числа больше или меньше 0 считаются «истинными».

От руки

const array = [0, 1, 2, 3, 4];
if (array.indexOf(3) > -1) {
     return 'exists';  
} 
else {
      return 'does not exist';
  }

стенография

const array = [0, 1, 2, 3, 4];
if (~array.indexOf(4)) // true

Побитовый (~) оператор вернет истинное значение для всего, кроме -1. Этот более простой синтаксис может быть достигнут Array.prototype.find и Array.prototype.includes

if (array.includes(3)) // true
if (array.find(val => val === 2)) //true

На этом завершается первая часть техник стенографии JavaScript.

Я надеюсь, что вы найдете эту статью очень полезной, и если да, поддержите меня! Также подписывайтесь на меня в Twitter, LinkedIn, Github, Facebook.

Я бы также попросил вас проверить микроверсию, чтобы получить опыт, который изменит вашу жизнь.

Удачного кодирования!

Техники сокращенного кодирования JavaScript — часть первая

Мне всегда интересно получить свое решение в одной строке при работе с алгоритмами Javascript. Это очень полезно, и код выглядит очень чистым и мощным. Однострочные не просты в обслуживании, но выглядят круто.

В этой статье мы рассмотрим некоторые интересные приемы стенографии JavaScript. Мне нравится называть это «делать больше с меньшим количеством JavaScript».

В этой статье мы рассмотрим как длинную, так и сокращенную версии.

1. Тернарный оператор

Тернарный оператор выполняет код на основе результата бинарного условия.

Он принимает двоичное условие в качестве входных данных, что делает его похожим на блок потока управления «если-иначе». Он также возвращает значение, ведя себя как метод.

От руки

const age = 20;
let result;
if (age > 18) {
    result = "Can stay for the night concert";
} else {
    result = "Go home!";
}

Строка

result = (age > 18) ? "Can stay for the night concert" : "Go home!";

Если вы хотите вложить цикл if,

const result = a > 18 ? "Can stay for the night concert" : a < 5? "Babies are not allowed" : "Go home!";

Так как это выглядит круто, давайте перейдем к нашей следующей технике.

2. Оценка короткого замыкания

Оценка короткого замыкания — это условие, при котором используется логический оператор. Он определяет, должен ли оператор принимать возвращаемое значение раньше (короткое замыкание). Это позволяет предотвратить ненужное выполнение кода.

В JavaScript есть три логических оператора:

  • Логическое И&&
  • Логическое ИЛИ||
  • Логично НЕ!

От руки

if (array1 !== null || array1 !== undefined || array1 !== '') {
     let array2 = array1;
}

Строка

const array2 = array1  || 'new';

Давайте посмотрим на другой классный пример

От руки

let dbHost;
if (process.env.DB_HOST) {
  dbHost = process.env.DB_HOST;
} else {
  dbHost = 'localhost';
}

Строка

const dbHost = process.env.DB_HOST || 'localhost';

3. Объявление переменных

Переменные обычно объявляются в верхней части функций, что, кстати, является хорошей практикой.

От руки

let node = head;
let prev = head.next;
let last = prev.next;

сокращенно

let node= head, prev= head.next, last= prev.next;

4. Стрелочные функции

Со стрелочными функциями легко работать, хотя их может быть немного сложно написать. Но они становятся менее подробными и запутанными, когда вы начинаете вкладывать их в вызовы других функций. Они делают наш код более кратким и упрощают область видимости.

От руки

function welcomeMessage (name) {
  console.log('Welcome', name);
}
setTimeout(function() {
  console.log('Loaded')
}, 3000);
list.forEach(function(item) {
  console.log(item);
});

Строка

welcomeMessage = name => console.log('Welcome', name);
setTimeout(() => console.log('Loaded'), 3000);
list.forEach(item => console.log(item));

5. Сокращение неявного возврата

Возврат — это ключевое слово, которое мы часто используем для возврата конечного результата функции.

От руки

const func = () => { return 'something'; }

Стенография

const func = () => 'something';

6. Сокращение оператора распространения

Оператор спреда позволяет расширять итерируемый объект там, где есть ноль или более аргументов. Это работает для элементов массива, парключ-значение для объектов.

От руки

const array1 = [a, b, c, d];
const array2 = [w, x, y, z];
function(array1, array2) {    
     for (const value of array2) {        
         array1.push(value);      
     }
}

Строка

const array1 = [a, b, c, d];
const array2 = [w, x, y, z];
function(array1, array2) return [ ...array1, ...array2 ];

7. Для сокращения цикла

Цикл For позволяет вам и перебирать элементы, работающие с ними по одному за раз.

От руки

const cars = ['Audi', 'Hyundai', 'Honda'];
for (let i = 0; i < cars.length; i++){
...}

сокращенно

const cars = ['Audi', 'Hyundai', 'Honda'];
for(let car of cars){...}

Если бы мы хотели получить доступ к машине по определенному индексу, то это было бы так:

for (let index of cars){...}

8. Сокращение свойств объекта

Es6 предоставляет более простой способ присвоения свойств объектам. Если имя переменной совпадает с ключом объекта, вы можете воспользоваться сокращенной записью

От руки

const x = start, y = end;
const obj = { x:x, y:y };

Строка

const obj = { x, y };

9. Сокращение присвоения свойств объекта

Объединение двух переменных может быть немного сложным. Рассмотрим код ниже

let fname = { firstName : 'John' };
let lname = { lastName : 'Doe'}

Чтобы объединить эти два оператора, в Es6 была введена функция Object.assign, которая создает новый объект без изменения существующих объектов.

let full_names = Object.assign(fname, lname);

Вы также можете использовать нотацию уничтожения объекта, представленную в ES8:

let full_names = {...fname, ...lname};

Назначение свойства объекта не имеет ограничений на количество свойств объекта, которые вы можете объединить, и значения всегда будут записываться в том порядке, в котором они были объединены, если нет объектов с тем же именем свойства.

10. Сокращение оператора побитового НЕ

Функция indexOf() используется для получения позиции искомого элемента при проверке существования значения в строке или массиве.

Если значение не найдено, возвращается значение -1. В JavaScript 0 считается «ложным», а числа больше или меньше 0 считаются «истинными».

От руки

const array = [0, 1, 2, 3, 4];
if (array.indexOf(3) > -1) {
     return 'exists';  
} 
else {
      return 'does not exist';
  }

стенография

const array = [0, 1, 2, 3, 4];
if (~array.indexOf(4)) // true

Побитовый (~) оператор вернет истинное значение для всего, кроме -1. Этот более простой синтаксис может быть достигнут Array.prototype.find и Array.prototype.includes

if (array.includes(3)) // true
if (array.find(val => val === 2)) //true

На этом завершается первая часть техник стенографии JavaScript.

Я надеюсь, что вы найдете эту статью очень полезной, и если да, поддержите меня! Также подписывайтесь на меня в Twitter, LinkedIn, Github, Facebook.

Я бы также попросил вас проверить микроверсию, чтобы получить опыт, который изменит вашу жизнь.

Удачного кодирования!