niedziela, lutego 19, 2017

Deklaratywnie czy imperatywnie... oto jest pytanie ;-)

Jest teraz wielka wojna między imperatywnym, a deklaratywnym programowaniem.
Ja w użyciu jestem bardziej przy imperatywnym, choć deklaratywne mi się podoba.

Ale popatrzmy na takie 2 przykłady, które robią dokładnie to samo:

public int findOddStream(int[] A) {
return Arrays.stream(A).reduce(0, (a, b) -> a ^ b);
}

public int findOddImperative(int[] A) {
int n = 0;
for (int i:A) n^=i;
return n;
}

Obie metody robią to samo, czyli znajdują nieparzystą liczbę w tablicy A.

Nie wiem czemu, pewnie przez lata praktyki, ale to drugie rozwiązanie wydaje mi się bardziej czytelne.

Fakt, że wersja deklaratywna ze strumieniami jest krótsza jeśli liczyć linie, ale w znakach jest dłuższa.

No i w wersji deklaratywnej trzeba wiedzieć, że 0 w reduce to identity redukcji, czyli taka "wartość startowa".

Szczerze nie wiem która wersja wydaje mi się bardziej czytelna.

PS.
Na Google+ w komentarzach wyszło, że dobrze by było podać linka do treści zadania, które tu jest rozwiązywane ;-)
Stąd link https://codility.com/programmers/lessons/2-arrays/odd_occurrences_in_array/


Podobne postybeta
Dziwne te ludzie ;-) - pazerność2
Miejsca gdzie nie używałeś jeszcze komputera [ewentualnie miejsca, gdzie nie dopadły nas jeszcze komputery ;-)]
Plus dla Scala, minus dla Groovy ;-)
Skasuj konto w Facebooku - oni zdecydowanie za dużo o Tobie wiedzą.
Sudoku - rozwiązanie doskonałe ;p