Pull to refresh
39
Константин@Cerberuser

Разработчик, экспериментатор

0,7
Rating
11
Subscribers
Send message
Присоединяюсь. Именно по этой причине я, поработав с TS, с трудом (и только по особой необходимости) заставляю себя возвращаться на чистый JS.
Явно преобразовывать между int и bool, говорите?

В мою бытность студентом (шесть лет назад) у нас был компьютерный класс. Ubuntu на терминалах, первый урок — как перейти в консоль и выйти из случайно запущенного vi, код пишется в mcedit… Первые эксперименты (примитивная fork-бомба, завесившая намертво терминал), первые куски кода, про которые никто не понимает, как это работает, и прочие радости юного кодера.
Одной из этих радостей был gcc, настроенный лично завкафедрой. -Werror — наш лучший друг, в этом я убедился ещё тогда; особенно, когда количество активных предупреждений начинает потихоньку переваливать за рамки очевидного.

Писали мы какую-то программу для работы с массивами. Уж не помню, что такое требовалось, но помню, что решил поместить индексы к массиву во второй такой же массив (типа double). Никакой арифметики с ними не производилось — только перестановки. В конце же, соответственно, требовалось взять элемент первого массива, индекс которого лежит в нужном месте второго массива. Казалось бы, дело простое, да?
arr[indexes[i]]
Ta-damm! Ошибка — за давностью лет уже и не вспомню, какая именно, но я, глядя на неё, решил попробовать явное приведение:
arr[(int)indexes[i]]
Фиг вам! Та же самая ошибка.

… В общем, конечная строка кода выглядела так:
arr[(int)(float)indexes[i]]
И удаление любого из двух явных приведений типа приводило к выбросу предупреждения (ну а в силу -Werror — к ошибке компиляции).

Явно преобразовывать между int и bool, говорите?..

P.S. А ещё я про этот случай периодически вспоминаю при работе с Rust. Со всеми этими
let int: i32;
let float: f32;
...
let double: f64 = (float as f64) * (int as f64);
Но здесь хотя бы понятна суть: весь язык устроен так, чтобы не давать выстрелить себе в ногу, обрезав результат под выходной тип.

"Не согласен — возражай. Возражаешь — предлагай". У Вас есть какие-нибудь более конкретные идеи, что в данном случае мог и должен был сделать npm, чтобы предотвратить проблему? А то, честно говоря, ощущение такое, что мы по большей части застряли на первом этапе: недовольства полно, а реальных альтернатив — не особо.

Попросил бы немного развить мысль: в каком production-ready языке эти возможности, на ваш взгляд, хорошо реализованы?

А всё потому что нефиг обучать систему на одном языке, а использовать на другом :)

В первой задаче специально имена подбирались для получения нецензурной регулярки? :)
Спасибо, было интересно оценить такого рода "олимпиадные задачи". Лабиринт понравился особо: некоторое время назад я пилил личный проект (своего рода point-and-click-квест) на Electron + React, и само понимание, сколько всего можно сейчас сделать, по сути, на чистом DOM, разглядел, можно сказать, на практике.

Возьму на вооружение идею, спасибо (не как кадровик, а как писатель) :)

Если трактовать null как "неизвестно что" — вполне разумно звучит :)

Прямо интересно стало, что за приведение типов происходит в первом случае...

Вероятно, имеется в виду — «сначала числом, потом словом».
Магазин-то что ощутит? Разгневанную очередь, громящую кассу? Пять минут ожидания — не такая и большая потеря в прибыли (а если потеря будет заметной — её найдут на кого повесить).
Ну как сказать… В основе может лежать сколь угодно производительная библиотека, но если поверх неё навалить кучу «бутылочных горлышек» (я сейчас не про авторов игры, а про сам phaser), то получится… кхм… как у упомянутого RPG Maker версии MV (который тоже на pixi.js + nw.js основан).

Баловался в своё время с RPG Maker-ом разных версий (сейчас немного подзабросил, правда), в том числе и с нырянием в код, так что статью не мог не оценить, спасибо!

Насчёт английского да, можно было добавить. Но неужели таких много?!

Закончил мехмат, сейчас в аспирантуре. Английский у нас, конечно, был, но сложно сказать, что я его сколько-нибудь изучил именно в стенах вуза — занятия были, по моим ощущениям, довольно слабые, самое лучшее в них — попытка упора на разговорную практику (брать пример с героев Тарантино, без шуток). Нынешнее отличие моих знаний от «London is the capital of Great Britain» — по большей части заслуга музыки (хочется же понимать, что там поют эти чёртовы Depeche Mode и иже с ними) и документации/статей/обсуждений по уже непосредственно задачам программирования (плюс немного от статей по темам курсовой/дипломной). Можно сказать — «учил самостоятельно»? Пожалуй, да. Типичный случай (хотя бы и для доли процента респондентов)? Не факт, но возможно.
Первую половину задачи решили, а вот для второй, по ходу, нужна система саморемонта. А мы ещё из Master of Orion знаем, какой это чит…
А, прошу прощения, велика ли разница, кто именно смог создать контрпример? Существенно только то, что он создан и достаточно общеизвестен.
Вопрос, насколько я понимаю, с подвохом, поскольку официально в JS int отсутствует вообще, и надо знать, при каких условиях он всё-таки существует, помимо всего прочего?
Очень хороший пример. :) Исключение из правил при сравнении. И в реальной жизни, как мне кажется, малоприменимый случай.

Я ведь правильно понимаю, что это аналог (примерный) строгого и нестрогого сравнения в JS, где активно рекомендуется использовать строгое везде где только можно, чтобы не делать лишних приведений типов?

С другой стороны, переходить с чего-то статически типизированного (хотя бы и с TypeScript, чем чёрт не шутит) на "динамику" — это тоже иногда боль, особенно если привыкнуть к хорошей поддержке со стороны IDE (да хотя бы и тот же VS Code для уже упомянутого TS). Хотя, конечно, я мог слишком быстро сдаться, и вообще давно пора RubyMine пощупать...

Information

Rating
2,469-th
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity

Specialization

Фулстек разработчик
Старший