-
Принцип работы FFT и Scala
Разбор алгоритма быстрого преобразования фурье (он же Fast Fourier transform, он же FFT). Целью публикации является отобразить суть алгоритма, а не создание быстрой по скорости работы реализации. Т.к. в этой программе я буду интенсивно использовать объекты вместо примитивных типов, а также рекурсию, скорость работы будет заведомо уступать многим другим реализациям FFT, которые можно сейчас найти…
-
printf
Небольшой справочник “для себя” по работе с джавным printf(). Для простоты текста заменил System.out.printf() на printf(). Базовые конструкции. %s → String или toString(). printf(“Hello %s!”, “World”); // “Hello World!” %n → Перенос строки. Byte, Short, Int, Long. %d → В десятеричном. %x → В шестнадцатеричном. %7d → В десятеричном. Минимальная ширина строки 7 знаков. printf(“%7d”,…
-
Поиск. КМП-алгоритм
Недавно на досуге решил написать алгоритм КМП (Кнута — Морриса — Пратта) для Scala. Изначально, мне нужно было решить простенькую задачку – найти последовательность байт в потоке байтов. Сделал на Java. Потом, решил сделать тоже самое на Scala. Занятно, но в стандартной библиотеке коллекций Scala используется именно КМП поиск. Вот мой вариант.
-
GWT. Обработка серверных исключений на клиенте.
В целом обработка исключений при работе в GWT через RPC довольно детально описана в разделе документации DevGuideHandlingExceptions Важный момент на который следуют обратить внимание – throws для метода. Например, вот Ваш интерфейс: public interface MyService extends RemoteService { public String myMethod(String s); } Допустим Вы сделали класс MyException который наследуется от RuntimeException. Например, это…
-
Читерство в NetBeans. Ввод и использования мат. символов и букв греческого алфавита.
Оригинальная идея взята из поста Gabriel’s software development blog. Статья довольно старая, опубликована еще в прошлом году . Если коротко: def √(x:Double)=Math.sqrt(x) def ∑(r:Range)(f:Int => Int)=r.foldLeft(0)(_+ f(_)) def ∏(r:Range)(f:Int => Int)=r.foldLeft(1)(_* f(_)) val s= ∑(1 to 100)(x=>√(x)) Это обычный 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);…
-
Практикум по программированию на Java и Scala
Начинается семестровый курс по выбору МФТИ “Практикум по программированию на Java и Scala”. Занятия будут проходить по понедельникам в 408 аудитории Лабораторного корпуса МФТИ. Начало занятий в 17:05.
-
For в Scala
Цикл for в Scala. for ( i < - 1 to 10) { println(i) } Что получится в итоге? Здесь все понятно. На консоль будут выведены числа от 1 до 10 включительно. Как это работает? Здесь немножко сложнее... Число 1 — это Int, будет неявно преобразован компилятором в тип RichInt. У RichInt есть метод to(end:Int),…
-
Самый лучший Singleton
Из всех существующих на момент написания этого поста реализаций шаблона Singleton (одиночка) мне больше всего нравится эта: public class Singleton { // Private constructor prevents instantiation from other classes private Singleton() {} /** * SingletonHolder is loaded on the first execution of Singleton.getInstance() * or the first access to SingletonHolder.INSTANCE, not before. */ private static…
-
Как рисовать UML диаграммы классов.
Диаграмма классов. Архитекторы программного обеспечения разговаривают на языке UML. Это такая своеобразная программисткая латынь. Использовать UML напрямую для программирования неудобно, зато многие его понимают и используют для выписывания рецептов описания архитектуры системы. Нарисовал диаграмму классов и стало понятней что к чему. Её поймет и дельфист и жаваист, и сишник и питоньшик, и сишарпер и рубист…