Одна из часто встречающихся проблем императивных языков программирования это отсутствие выражений для декларативных структур, таких как, к примеру, древовидные разметки или набор правил для обработки данных. В Groovy эта проблема решена с помощью классов типа Builder и мета-программированием на уровне абстрактного синтаксического дерева.
Пользователь
Cимулятор SLR камеры
1 мин
2.1KНа хабре остался незамеченным простенький симулятор SLR камеры от CameraSim, находится по ссылке http://camerasim.com/camera-simulator/
+7
Python. 10 вопросов на знание языка
1 мин
9KНесколько вопросов, которые помогут составить общее впечатление о знании языка, к примеру, на собеседовании
+21
JS tips
1 мин
387Алгоритм получение результата А && B
Если операнд A истинный (true, «string», someObj), результатом является B, иначе — А.
То бишь код:
Может быть заменен на более компактный:
Алгоритм получение результата А || B
Если операнд A истинный, результатом является A, иначе — B.
Эта особенность может быть использована для присвоения дефолтных значений переменным:
Создание объекта на лету
Если операнд A истинный (true, «string», someObj), результатом является B, иначе — А.
То бишь код:
if (a) {
return a.member;
} else {
return a;
}
Может быть заменен на более компактный:
return a && a.member;
Алгоритм получение результата А || B
Если операнд A истинный, результатом является A, иначе — B.
Эта особенность может быть использована для присвоения дефолтных значений переменным:
last = input || default_value;
Создание объекта на лету
obj = {fieldName: "a"};
— объект с полем fieldName+2
Пример оптимизации в JVM
2 мин
584Набрел на интересный пример оптимизации при динамической компиляции
public class StupidMathTest {
public interface Operator {
public double operate(double d);
}
public static class SimpleAdder implements Operator {
public double operate(double d) {
return d + 1.0;
}
}
+11
Svn. Откат изменений на сервере
1 мин
3.1KБывает накомитешь какашек — потом жалеешь. Вот пилюля для отката изменений на сервере:
svn diff -r 73:68 http://my.repository.com/my/project/trunk
73 — наша текущая ревизия
68 — куда хотим откатиться
Смотрим дейстивтельно ли только мы вносили изменения файл. Если нет, то придется откатыватся вручную — через редактирования проблемных участков с последующим комитом. Если все ок:
svn merge --dry-run -r 73:68 http://my.repository.com/my/project/trunk/
Смотрим что будет мержиться, если нет никаких конфликтов идем дальше:
svn merge -r 73:68 http://my.repository.com/my/project/trunk/
svn merge просматривает измениния между 73 и 68 ревизией и применяет их к вашей рабочей копии
svn commit -m «Reverted to revision 68.»
Пушистых Вам багов, господа!
svn diff -r 73:68 http://my.repository.com/my/project/trunk
73 — наша текущая ревизия
68 — куда хотим откатиться
Смотрим дейстивтельно ли только мы вносили изменения файл. Если нет, то придется откатыватся вручную — через редактирования проблемных участков с последующим комитом. Если все ок:
svn merge --dry-run -r 73:68 http://my.repository.com/my/project/trunk/
Смотрим что будет мержиться, если нет никаких конфликтов идем дальше:
svn merge -r 73:68 http://my.repository.com/my/project/trunk/
svn merge просматривает измениния между 73 и 68 ревизией и применяет их к вашей рабочей копии
svn commit -m «Reverted to revision 68.»
Пушистых Вам багов, господа!
+2
Информация
- В рейтинге
- Не участвует
- Зарегистрирован
- Активность