Nedavno sam rješavao jedan relativno jednostavan programski zadatak. Trebalo je složiti hijerarhijsku strukturu prema podacima koji su bili spremljeni u tri kolone u tablici, pri čemu je svaka kolona odgovarala jednom nivou hijerarhije. Isti problem sam već tko zna koliko puta kodirao u raznim jezicima, a ovaj put sam koristio PHP. Problemu sam pristupio kao i obično, a onda me kolega uputio u puno jednostavnije rješenje koje mi nikad ne bi palo na pamet, jer razmišljam previše ne skriptno s obzirom da primarno koristim stronly typed jezike.

Počet ću sa primjerom podataka u tablici i željenom konačnom strukturom.

column1 column2 column3
grupa jedan x vrijednost
grupa dva y vrijednost
grupa
jedan
x vrijednost
dva
y vrijednost

Tablica prikazuje primjer podataka, a odmah pored je željena hijerarhijska struktura koju želimo dobiti. Nakon što smo podatke povukli iz baze, željenu transformaciju u PHP-u možemo izvesti u par linija koda.

foreach($rows as $row)
{
  $tree[ $row['column1'] ][ $row['column2'] ] = $row['column3'];
}

Strogo gledajući, nismo složili hijerarhijsko stablo, ali smo složili dvodimenzionalno polje u kome je prva dimenzija vrijednost prve kolone, a druga dimenzija je vrijednost druge kolone, što nas vodi do željene vrijednosti. Pokušajte složiti nešto slično u npr. Javi. Siguran sam da ćete potrošiti koju liniju koda više.

Skriptni jezici kao što je PHP ne zahtjevaju eksplicitnu deklaraciju varijabli. Dimenzije polja se mogu dodavati kad god vam zatrebaju isto bez posebnih deklaracija. Varijable nemaju eksplicitne tipove, pa ih možete u bilo kom trenutku prepisati vrijednošću potpuno drugog tipa i upravo zbog takvih sloboda se ovakva transformacija može izvesti u svega par linija koda, ali velika sloboda uvijek dolazi uz visoku cijenu.

Zbog toliko slobode, razvojne okoline teško mogu prepoznati tip podatka koji je trenutno spremljen u nekoj varijabli, pa onda i teško mogu pomoći prikazujući funkcije i metode koje bi se mogle pozvati u slučaju da je varijabla nekakav objekt itd. Sve ima svoju cijenu, pa i sloboda skriptnih jezika. Ipak, zanimljivo je vidjeti šta se sve može izvesti u par linija koda uz slobode skriptnih jezika kao što je u ovom primjeru PHP.

Sada se trudim razmišljati više skriptno kad radim u PHP-u, ali i u drugim skriptnim jezicima : )