Comments 39
Но JS принято хаять, а тут прям как манна небесная все эти возможности запутать код.
str charAt 5
Пример повышенной читабельности
Чтото это мне напоминает… слабую типизацию в JS и другие «нюансы»
Scala является strong static type языком. За механизм вывода типа отвечает компилятор, если вы не указываете его явно.
Т.е. вот это правильно и все так должны делать?
Все зависит от вашего style guide. Но обычно такой вызов метода, в infix notation, не используется. Предпочитают более явный: str.charAt(5)
Эта форма используется часто для DSL. В скале это одна из киллер фич. Вы описываете свои операторы для своего языка который вам подходит, получаете максимально выразительный код практически без boilerplate. Не все, конечно, ложится, но для всяких систем правил, ETL и прочего — очень удобно. Когда вы пишете просто императивный код есть соглашение, что когда есть символьные имена используется операторная нотация, а когда нет — обычная через "точку".
А вообще — удачи!
С точки зрения автора — все хорошо. С точки зрения читателя — еще один, сто десятый пост о том, что существует такая штука, как fold?
Вообще говоря, статью я писал 2 года назад и уже давно забыл про нее. Сейчас за нее немного стыдно)
Но, тем не менее, главная цель — поделиться впечатлениями новичка и рассказать свою историю о том, как пробовал учиться. Для таких же новичков. Если бы я в то время нашел такую статью, мне было бы 100% интересно.
А про всякие технические неточности и т.п. уже написали, или напишут, в комментариях.
Повторюсь, цель — рассказать историю. А переписывать историю не круто)
А с другой стороны, такого материала просто завались в интернете.
Он не добавляет вообще ничего к теме изучения, увеличивает данные при поиске инфы.
Но самое главное! Такие статьи банально вводят в заблуждение неточностью информации. Что порождает чудовищное количество мифов во круг языков вообще и скалы в частности.
Ведь никто не будет править статью, вносить изменения, уточнения и т.д. Она так и будет, извините, «засирать» головы начинающим разработчикам, у которых еще не сформировалось критическое мышление в отношении языков программирования.
ИМХО Таким статьям место в личном бложике, а не на популярных ресурсах.
2. Сравнение с танком странное. Если использовать как better-java, то разницы не особо — синтаксис и еще одно стдлиб. Если использовать фп, ну это как раз для бизнес-приложений отлично. Гарантий больше, тестов меньше.
Их не выпилят, а вынесут в отдельный модуль.
Option. Такого в Java нет. В двух словах — это контейнер в котором либо пусто(None, похоже на null, но имеет методы map, filter, ...),
В java иногда (я первый раз в живом коде увидел в 2005 году) применяют паттерн создания статик инстанса объекта с именем NULL. И в методах, где возвращается экземпляр обьекта этого класса, если по ряду причин неудобно кидать эксепшен, возвращают этот NULL. Не всегда применимо, но частенько спасает. Особенно при всяких ETL операциях. Скала походу оттуда это взяла. Вкупе с паттерном «возвращать список» ваще сильно устойчивая ко всяким неожиданностям архитектура получается
применяют паттерн создания статик инстанса объекта с именем NULL
Выглядит как царь-костыль.
Скала походу оттуда это взяла.
Маловероятно, в Scala много чего пришло из Haskell и других ФЯ. Посмотрите там Maybe, очень похоже. Ну а потом, уже видимо из Scala, это перекочевало в Java 8 в виде Optional.
Описанный мной паттерн удобно использовать, когда нужно замапить внешние данные в какую либо внутреннюю структуру и при этом нет большого смысла сообщать о нечастых ошибках во входных данных или о том, что незначительно изменилась их структура.
Хотя бы потому, что никаких движений по их исправлению не будет, грубо говоря, заказчика вполне устраивает если будет успешно преобразовано 60..70% входных данных из большой иерархической структуры. Вот там такие «заглушки» вполне к месту.
Костыль, костыль.
None это синглтон типа Option[Nothing].
Nothing это синтетический костыль-тип, являющийся подтипом для любого типа. Другими словами Nothing наследуется вообще от всего и сразу.
Option ковариантен. А значит Option[Foo] является супертипом (родителем) для None: Option[Nothing].
Именно ковариантность позволяет использовать None с Option любых типов.
Благо все это существует лишь в разуме компилятора. А потом хренакс: привет стирание типов и Option[Object].
Ну совсем же не похоже — экземпляр класса vs пустая коллекция. Больше похоже на nullable объекты, только проверки на null легко потерять, а в Option/Optional тип хоть не совсем строго, но поощряет правильное использование.
Ну совсем же не похоже — экземпляр класса vs пустая коллекция.
Не совсем понял, что не похоже? Где экземпляр класса? Где коллекция?
Нульарная Function0 смотрит на вас с обидой.
Как я Scala учил