Pull to refresh
7
0
Игорь Михайлов @igormich88

Прoгрaммиcт

Send message

Программа работает

Reading time2 min
Views5.2K
Он неустанно писал о своей программе, на разных форумах и сайтах. Его избегали как прокаженного, минусили, банили. Но он продолжал. С помощью простого поиска можно было понять, что он бродит по форумам со своей программой едва ли не с момента появления рунета. И пишет о своей чудо программе чуть ли не круглые сутки без перерывов на сон. Такая настойчивость вызывает интерес. А возможно и некоторое уважение к целеустремленности автора. Поддержав его, я столкнулся с неожиданной агрессией сообщества, ощутив себя таким же инородным телом, как и он сам.
Читать дальше →
Total votes 40: ↑21 and ↓19+2
Comments10

Generic исключения в лямбда-функциях

Reading time5 min
Views8.6K
UPD: Добавлен пример с ленивыми вычислениями поверх стандартных стримов.

Как известно из функциональных интерфейсов в Stream API нельзя выбрасывать контролируемые исключения. Если по каким-то причинам это необходимо (например, работа с файлами, базами данных или по сети), приходится оборачивать их в RuntimeException. Это неплохо работает если ошибки игнорируются, но если их необходимо обрабатывать, то код получается громоздкий и трудночитаемый. Я заинтересовался можно ли объявлять интерфейсы и методы с generic исключениями и неожиданно для себя узнал, что можно.

Зададим такой функциональный интерфейс, от стандартного интерфейса Function<A, B> он отличается только наличием третьего generic-типа для бросаемого исключения.

public interface FunctionWithExceptions<A, B, T extends Throwable>{
	B apply(A a) throws T;
}

И объявим простенький метод, который преобразует коллекцию используя этот интерфейс, у этого метода также объявлен generic-тип для бросаемого исключения (совпадающий с типом исключения которое может выбросить функциональный интерфейс).

public static <A, B, T extends Throwable> Collection<B> map(Collection<A> source, FunctionWithExceptions<A, B, T> function) throws T {
	Collection<B> result = new ArrayList<>();
	for (A a : source) {
		result.add(function.apply(a));
	}
	return result;
}

Посмотрим, как будет выглядит обработка исключений с ними в разных случаях.
Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments7

Когда 2 + 2 = «4»

Reading time3 min
Views20K
Во время отдыха от отладки JavaScript, я читал статью про особенности PHP и неожиданно задумался каковы же будут результаты сравнения 2 + 2 = «4» для разных языков программирования. И вот что из этого получилось.
Итоговая таблица для тех кто не хочет много читать
Результат Ошибка компиляции False True
Языки C++
Pascal
FORTRAN-95
Java
C#
Go
Rust
Haskel
C
Lisp
Python
Lua
Ruby
JavaScript
PHP
Perl

Компилятор C выдаёт предупреждение, компилятор C++ ошибку которая превращается в предупреждение если указать флаг -fpermissive.

Под катом для каждого из языков приведена строчка кода, вызвавшая тот или иной результат, с небольшим комментарием.

Бонусом — функции вывода на консоль для этих языков.
Читать дальше →
Total votes 63: ↑37 and ↓26+11
Comments84

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity