piątek, czerwca 10, 2011

Problem języka

Kolejny raz jestem w sytuacji w której trudniej opisać jak ma działać pewna funkcjonalność aplikacji, niż tą funkcjonalność zakodować ;-)

W językach programowania jest na tyle fajnie, że bloki są równocześnie pojedynczymi "wyrazami", stąd takie coś:

if (a) {
doThing();
if (b) {
doSth();
} else {
doOtherSth();
}
} else {
doYetAnotherThing();
}
Jest dość jasne i łatwe do przeczytania jeśli się jest programistą ;-)
Rysunek jest ciut bardziej skomplikowany:
Ale nadal można go ogarnąć.

Ale jak to zapisać po polsku?

Jeżeli a to doThing, następnie sprawdź czy b, jeśli tak to doSth, w przeciwnym przypadku doOtherSth.
Jeśli nie a to doYeatAnotherThing.

Jak dla mnie to jest to o wiele bardziej skomplikowane. Dodatkowo nie pokazuje zależności między stanem a, a tym co ma zostać zrobione.... no i jakby nie patrzeć nie da się z tego też napisać tego samego kodu, bo można ten zapis "słowny" odczytać jako:

if (a) {
doThing();
if (b) {
doSth();
} else {
doOtherSth();
}
}
if (!a) {
doYetAnotherThing();
}
A wbrew pozorom to nie to samo ;-) Bo tamto w razie jak nam jakiś zły wątek zmieni stan a to zadziała tak jak powinno, a to drugie może jednocześnie wejść do pierwszego ifa, a później do drugiego ;-)

To by znaczyło, że zapis słowny powinien iść jakoś tak:

Jeżeli a to doThing, następnie sprawdź czy b, jeśli tak to doSth, w przeciwnym przypadku doOtherSth.
Jeśli w momencie poprzedniego testu a było nieprawdziwe to doYeatAnotherThing.


Jeszcze bardziej zamotane. Chociaż choć częściowo thread safe ;p

Fajniej by było gdyby wszyscy umieli programować ;-)


Podobne postybeta
Sztuczki tropiciela błędów, part 4
Java 8 nadchodzi....
Referencje w Java'ie
[*] najbardziej pusty imotek
Odwiedzacze 2 ;-)