.lua → .js

Переход с Lua на JavaScript оказался сложнее, чем я ожидал.

Не из-за асинхронности, замыканий или прототипов. А из-за привычек после Lua. Вот несколько вещей, на которых я регулярно спотыкался:

1. Массивы начинаются с 1, а не с 0 В JavaScript: players[0] В Lua: players[1] Казалось бы, мелочь. Но первое время было непросто привыкнуть.

2. nil - это не undefined В JavaScript: obj.name = undefined; Свойство всё ещё существует. В Lua: obj.name = nil Ключ вообще удаляется из таблицы.

3. 0 и пустая строка - это true В JavaScript: if (0) { … } // false if (“”) { … } // false В Lua: if 0 then … end – true if “” then … end – true Ложными считаются только false и nil.

4. Склейка строк Вместо привычного: "Hello " + name В Lua: "Hello " … name

5. Массив и словарь - это один тип В JavaScript есть Array, Object, Map. В Lua почти всё строится вокруг одной структуры - table. Она одновременно может быть и массивом: players = {“Ann”, “Bob”} и словарём: player = { name = “Ann”, score = 100 } и даже сочетать оба варианта.

Все эти различия на первый взгляд кажутся незначительными, а на деле могут вызывать серьёзную путаницу. Не потому что их сложно понять, а потому что сложно переучиться.

Были ли у вас переходы между языками? Какой оказался самым неожиданным и/или сложным?

#gamedev #lua #frontend #js

.lua → .js | Сетка — социальная сеть от hh.ru