a > || = b
if (a >= b) {
Я ловил моменты, когда условие всё-таки нувыпоняли.
Один раз это был злобный вирус, влезший в код.
Другой - хватило логики компилятора.
Один раз это был злобный вирус, влезший в код.
Другой - хватило логики компилятора.
че это новая спецификация джаваскрипта вышла?
Вот по этому очень много людей не долюбливает динамические языки. Нужно пипец как следить за тем что и куда пишешь. Не то чтобы Java или C# намертво застрахованы от такой фигни, но шансов поменьше.
Немного не понял причем тут димамические языки если насколько я понял вместо >= тут =>, почему в строгих такой проблемы нет?
Строгая типизация не позволит засунуть в if что-то кроме bool. Хотя вспоминая универ, тот же C++ вроде как разрешает подсунуть int. На C# уже только bool, или иди нафиг. Страхует от кучи случаев, кроме сравнения двух буленых переменных. Там уже можно написать лажу в духе if(a = b) и долго вдуплять что не так (радует что современные IDE таки намекнут, при условии что разраб обращает внимание на варнинги).
Если смотреть чуть более шире, то тот факт что всегда нужно соблюдать тип данных, позволяет избегать неверную интерпретацию данных и банальные опечатки. Я бы сравнил это с защитой от дурака, когда разъем чисто физически не подходит и не позволяет воткнуть себя неправильно. Из минусов -- постоянный мапинг данных, явное приведение и кучу другой монотонщины.
Не нужно путать статическую/динамическую типизацию и слабую/сильную (строгую) типизацию. В JS слабая динамическая типизация. В Python, например, типизация тоже динамическая, но строгая, поэтому там есть существенные ограничения на преобразования типов. В C/C++ из твоего примера - слабая стататическая, поэтому если возможно преобразование типа, даже через 100 промежуточных, оно всегда будет выполняться. В C# строгая статическая типизация, но там все равно есть неявное преобразование типов, поэтому засунуть в if можно не только bool, а любой тип, который неявно в него приводится. Неявного преобразования типов разве что в Java нет из тех языков, что на ум приходят.
java сразу пресечет это ошибкой компиляции и в IDE все будет красным гореть
Объясните, а что не так? Код сработает же? Да, может выглядит не совсем правильно и стоило написать как ">=", но и так в целом всё понятно.
Да, чел на скрине немного объедался с написанием:
expression < expression
expression > expression
expression <= expression
expression >= expression
expression > expression
expression <= expression
expression >= expression
Вместо сравнения чисел объявлена стрелочная функция
В строго типизированных языках, была бы ошибка синтаксиса, из-за попытки использовать переменную "число", как выражение "замыкание" (то бишь функция, да не просто, а которую можно передать в др. ф-цию в качестве аргумента), но для изящного джиэс, это рантайм еррор.
Выражение a => b, аналогичен автовызову (function (a) {return b})(a)
Выражение a => b, аналогично объявлению function (a) {return b}, но никак не автовызову
Ты правильно говоришь, но я про другую часть синтаксиса:
(function(a) {...})(a)
= function(a) {...}
+ (безымянная функция)(аргументы)
И сокращение именно про это
Я не понял откуда взялось (function(a) {...})(a).
a => b из поста будет аналогично a => 5 и тут никаких других подстановок значений не будет.
При чем код из поста работать будет без ошибок и даже "правильно" пока a >= b.
a => b из поста будет аналогично a => 5 и тут никаких других подстановок значений не будет.
При чем код из поста работать будет без ошибок и даже "правильно" пока a >= b.
Ну типа:
const f = function (a) { return b; }
И в случае сокращенного синтаксиса, какое выражение аналогично¿:
if (f) {...}
Или:
if (f(a)) {...}
?
Оттуда, что можно проверить существование переменной, а можно вызвать функцию, и проверить результат. ()() - это не сиськи, это вызов!
Ну и что тут смешного, где смеяться ?
Просто посмотри короткое пояснительное видео.
Чтобы написать коммент, необходимо залогиниться