-
Немного карри
Использовать карринг в Scala одно удовольствие. Само определение каррирования(или карринга, названо в честь Хаскелла Карри): Для функции h типа h : (A × B) → C оператор каррирования Λ выполняет преобразование Λ(h) : A → (B → C) Отметим, что Λ – это оператор, то есть “функция над функциями”. Например берем функцию foo(x,y), каррируем и…
-
Календари и даты
Постоянно наталкиваюсь на людей, которые утверждают, что “Date – deprecated, нужно использовать Calendar”. Это не верно! Вариаций на тему “почему это не верно” где-только уже не написано, но все-равно появляются люди которые мне доказывают, что правильней использовать Calendar (аргументеруя именно “устареванием” Date). На самом деле в классе Date просто много deprecated методов. Но если почитать…
-
Удобный небезопасный кастинг
Удобный автоматический кастинг Вещь не новая, но для тех, кто начинал программировать на Java в 90-ые и не очень привык к Generics-ам, это может быть интересно. Пример использования. Вам нужен метод, который возвращает объекты разных классов. Это могут быть обычные объекты – String, Integer, List, а могут быть и какие-то “свои” сложные бизнес-объекты вроде –…
-
Scala. Pattern Matching
Продолжил работу по созданию учебных материалов по Scala. Выкладываю черновую версию одной из глав. Сопоставление по образцу (pattern matching). Начало.
-
Netbeans Scala Maven
Если вам приходилось работать в связке Netbeans 6.9.1 + Scala + Maven, то вы могли заметить, что компиляция происходит сильно медленнее, чем если бы вы НЕ использовали maven-scala-plugin. Дело в том, что по умолчанию компиляция запускается в режиме “компилировать все классы”. Это не очень приятно, учитывая то, что Scala компилятор не очень-то быстрый. К счастью,…
-
Быстрый обратный корень на Java
Fast Inverse Square Root, он же Fast InvSqrt() или 0x5f3759d5 – способ вычисления обратного квадратного корня из числа = 1/sqrt(x). Изобретен еще в 90-х годах. Если верить википедии, то этот алгоритм использовался в Quake III. Главная фишка метода в использовании “магической” константы – 0x5f3759d5, с помощью которой можно получить первое приближенное значение. Затем обычным методом…
-
Принцип работы FFT и Scala
Разбор алгоритма быстрого преобразования фурье (он же Fast Fourier transform, он же FFT). Целью публикации является отобразить суть алгоритма, а не создание быстрой по скорости работы реализации. Т.к. в этой программе я буду интенсивно использовать объекты вместо примитивных типов, а также рекурсию, скорость работы будет заведомо уступать многим другим реализациям FFT, которые можно сейчас найти…
-
Поиск. КМП-алгоритм
Недавно на досуге решил написать алгоритм КМП (Кнута — Морриса — Пратта) для Scala. Изначально, мне нужно было решить простенькую задачку – найти последовательность байт в потоке байтов. Сделал на Java. Потом, решил сделать тоже самое на Scala. Занятно, но в стандартной библиотеке коллекций Scala используется именно КМП поиск. Вот мой вариант.
-
Магия унарных операторов в Scala (unary_)
Многие знают, что в Scala возможна перегрузка операторов. К примеру, пусть у нас будет класс – двухмерная точка: class Point(val x: Double, val y: Double) { def -(p: Point) = new Point(x-p.x, y-p.y); def +(p: Point) = new Point(x+p.x, y+p.y); } Работать с ней приятно: val p1 = new Point(2,2); val p2 = new Point(1,1);…
-
Мизинец программиста
Постановка задачи Если Вы программист и используете среду разработки (IDE) более интеллектуальную чем блокнот, то скорее всего Вам часто приходится пользоваться различными горячими клавишами. В большинстве случаев это комбинации содержащие нажатие клавиши Ctrl. Например в NetBeans: Ctrl + Пробел = Автодополнение Ctrl+ Q = К месту последнего редактирования Ctrl +W = Закрыть окно Ctrl +…