Сегодня мы рассмотрели REPL в Java (9), JavaScript и Clojure, проверив всевозможные ошибки и различия между ними. Вот некоторые интересные находки со всеми процессами, которые мы пробовали:

  1. TRUE — это не то же самое, что true: когда я проверял true/false в REPL, я заметил кое-что, о чем никто не упоминал. Если вы наберете любую из букв заглавными буквами, система внезапно перестанет распознавать их как логические и, я полагаю, рассматривает их как неузнаваемые символы или как неопределенные.
  2. Магия чисел. Когда я вчера проверял некоторые уравнения, я наткнулся на сложение 4,1 и 36,27 и получил, как мне показалось, странный результат — 40,370000000000005. Каким-то образом была крошечная часть, которая была добавлена ​​к этим двум двойникам, сложенным вместе. Это произошло во всех трех REPL, поэтому я могу только предположить, что они следуют одному и тому же процессу оценки, чтобы достичь такого результата.
  3. Сила золота. Максимальное целочисленное значение 2 147 483 647 – это забавное число, с которым можно поиграть, если на кону не стоит ваше золото. На самом деле я знал (приблизительно) об этом целочисленном лимите, потому что я играю в World of Warcraft и помню, как слышал о людях, достигших золотого предела. Поскольку это было 32-битное целое число, как только люди достигли этой суммы и внезапно перешли, они потеряли все свои деньги — в конце концов Blizzard пошла и изменила ограничение, чтобы оно не было привязано к ограничениям программирования, а было привязано к их собственному установленному лимиту. Зато было забавно воспроизвести эту ошибку в Java, прибавив к максимальному целочисленному значению и получив огромное почти инвертированное число.
  4. True + True = 2: мне показалось очень интересным, как Java и Clojure выдавали ошибку при попытке добавить логические значения, но JavaScript говорил: «Нет, мы просто сложим один и один вместе». . О, вы имеете в виду идиому два и два? Нам так больше нравится».
  5. Разделить на ноль. Было интересно посмотреть, в чем заключаются различия. Java выдавала ошибку, если это было целое число, а если двойное, то выдавала бесконечность — то же самое произошло с Clojure. Однако JavaScript давал бесконечность независимо от того, использовалось ли целое или двойное число. Я всегда представлял себе, что реальный ответ будет ближе к нулю, как если бы у вас было пять файлов cookie и вы разделили бы их на ноль способов, единственный способ сделать это было бы, если бы вы съели файлы cookie и у вас не было файлов cookie для деления.
  6. Двойной или одинарный. Почти все три REPL работают одинаково, когда речь идет о строках, если только вы не используете одинарные кавычки для их выделения. Java вообще не любит одинарные кавычки, JavaScript понимает, что это строка, а Clojure фактически распознает строку по первой кавычке, а затем предполагает, что вторая кавычка является частью строки. Сокрушительное открытие! Хотя, поскольку он распознает только первое слово, любые пробелы приведут к тому, что следующие слова будут считаться каким-то другим символом, и ошибка будет исключена.
  7. Одна строка ведет к другой, кроме Clojure. Как в Java, так и в JavaScript вы можете соединить две строки вместе с помощью операции сложения, но в Clojure это просто говорит НЕТ. Ну, в коде ошибки, конечно…

Большая часть остальной части тестирования была мне довольно знакома: целое и целое вместе давали бы целое число, что если бы двойное и целое были в одном уравнении, то результатом было бы двойное из-за сохранения более точных данных, остатка и мод. функций были одним из самых странных и в то же время самых интересных результатов. Я вижу, как использую эти функции для получения более последовательных, но все же довольно случайных чисел.

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

440