Pull to refresh

Comments 13

Начинающим, но уже освоившим один язык — некий быстрый старт для смежного языка.
По большей части синтаксис интуитивно понятен, но некоторые моменты частенько вгоняют в ступор, как например join в Питоне
Условное присвоение? Это обычное присвоение + тренарный оператор.
Начнем с приведения строки к целому. В Питоне все просто и прямолинейно:

number = int(text)

Но в JS вы должны объяснить к какой системе вы собираетесь приводить...

Настолько просто и прямолинейно, что второй аргумент основания системы счисления является именованным и имеет значение по умолчанию:

number = int(text, base=10)
key = 'color';
value = dictionary[key] || 'GREEN';

Если по ключу вернется значение 0 или "" (пустая строка), то оно интерпретируется как false и тогда вернется 'GREEN'. Но сдается мне, что в некоторых ситуациях мы будем ожидать именно 0 или пустую строку.
Как мне кажется, лучшим подходом было бы проверить именно на undefined
key = 'color';
value = dictionary[key] !== undefined ?  dictionary[key] : 'GREEN';

… но в некоторых случаях мы будем ожидать именно undefined (почему нет?), и лучшим подходом будет проверка через in:


key in dictionary ?  dictionary[key] : 'GREEN';
> В JS вы можете проделать такой же трюк как со свойством объекта – OR со значением по дефолту
В питоне такое тоже работает:
>>> a = None
>>> b = a or 'GREEN'
>>> b
'GREEN'

Тут имелось в виду что в Питоне есть стандартный метод получения значения из словаря по отсутствующему_ключу — get(key, default_value) — а в JS для такого надо городить небольшой костыль в виде OR, который стал де-факто стандартной практикой.
Вообще же в любом языке (ну за исключением может быть какой-то экзотики) сравнение нуля/Null/None/False OR что_то_отличное_от_нуля — всегда дает это_что_то
Не согласен про экзотику. В любом сильно-типизированном языке (c, cpp, java) логический OR может вернуть только bool.

Но в C и C++ типизация слабая (неявная), т.к. там есть неявные преобразования типов. В Питоне же она как раз сильная.

Вы правы насчет слабой в С\С++, но утверждают, что она там явная (кроме auto с C++11). Вообще там черт ногу сломит в определениях… Я хотел сказать, что в этих трех языках точно не получится провернуть трюк с OR, и уж точно их нельзя назвать экзотикой.
items = items1.concat(items2);

если уже говорить о различных подходах в языках, то стоит, наверное, упомянуть и возможность сделать вот так:
items = [...items1, items2]
Sign up to leave a comment.

Articles