14.08.2010 | 23:36
Moja antipatija prema C-u ima korjene u ranim devedesetima, kad se na osobnim ili kućnim računalima nije moglo naći C compiler koji bi bio iole upotrebljiv. Svi su bili bugoviti i puno manje upotrebljivi od npr. Turbo Pascala ili Borland Pascala 5.
Meni je Aztec C na Amigi bio savršeno upotrebljiv, pogotovo za moje tadašnje potrebe.
Što je pak tebe mučilo?
Đipi, ima veze sintaksa s urednošću. Sintaksa pascala (kao školskog jezika) tjera te da budeš uredan (naravno da i dalje možeš biti neuredan ako to baš jako jako jako želiš, ali moraš se zaista potruditi). Sintaksa C-a potiče neurednost. I nečitkost.
Sorry, ne slažem se.
Još u srednjoj, gdje sam morao koristiti Pascal jer su me natjerali puškom
, viđao sam kupusaste Pascal programe. I istovremeno sam pisao beskonačno urednije C programe. I vidio sam urednije programe od mojih koji su pisali još uredniji programeri. A vidio sam i kupusaste C programe. I nisam u svemu tome našao nikakav pattern osim činjenice da se dan danas ne mogu sjetiti nečeg ne-školskog, što je napisano u Pascalu. Dakle, jedino s čim se mogu složiti je da je Pascal školski jezik. I da se mene pita izbacio bih ga iz škola, jer ne vidim nikakvu korist od vježbanja mozga da prilagodi razmišljanje i kodiranje njegovoj sintaksi. Izbacio bih i LOGO iz škole (ako već nisu).
Primjer: zašto bi se procedura zvala procedurom, kad je možemo nazvati void funkcijom? Općenito, kakve li perverzne ideje - uvesti "void" tip podataka.
Možda zato što je "jednostavnije" imati samo funkcije nego imati i funkcije i procedure?
A objasniti da funkcija može "i ne vratiti ništa" je jednostavnije nego objasniti razliku između funkcije i procedure. Manje suvišnih informacija za pamtiti.
Iz istog razloga smatram da je jednostavnije, bez obzira na naizgled kompleksniju sintaksu, naučiti nekoga C sa njegovih 30ak ključnih riječi nego BASIC sa njegovih 200+ ključnih riječi. Da ne bude zabune između teorije i prakse - preferirao bih nekoga učiti programiranje kroz BASIC, sveden na minimalni subset naredbi, samo zato da preskočimo kompajliranje.
Ali da moram u 5 dana od laika napraviti upotrebljivog programera (uz uvjet da mu logika funkcionira u startu!), učio bih ga C.
Ili: Kakvo je to podilaženje lijenosti da umjesto i:=i+1 možeš napisati samo i++, ili pak ++i? Čemu to služi?
Zašto bi to bilo "podilaženje lijenosti"?! i:=i+1 (pri čemu me posebno zabavlja dvotočka!) čitam kao "i jednako i plus 1". A i++ čitam kao "uvećaj i za jedan". To je stari dobri assemblerski "inc". Osim što se brže tipka, meni osobno je i++ daleko pregledniji u kodu od i=i+1. Danas, u vrijeme kada "Hello world!", kompajliran, bez pardona ima... 5 MB
vjerojatno nitko ne misli da kompajler i++ defaultno prevede u neki addq (MC68000) koji potroši manje ciklusa za uvećati vrijednost registra za 1 nego što ga potroši alternativni i=i+1. Nekad se o tome moralo voditi računa pa je i++ bio Bogom dan.
I da, danas su i kompajleri inteligentniji pa su u stanju analizirati kod i sami zaključiti da li je i=i+1 u kodu "ovo" ili "ono".
Nekad su bilo "gluplji" pa smo, valjda, mi moralli biti pametniji.
I onda to još začahuriti u drugi izraz pa onda više nije svejedno piše li i++ ili ++i jer ovisi o tome da li se vrijednost i vraća prije ili nakon povećavanja? Kakav je toga smisao?
Ako stoje samostalno u liniji i tretiraš ih kao supstitut za i=i+1, naizgled nikakav. Ali ako se koriste u, primjerice, testiranju (if) pri čemu omogućavaju da inkrementaciju obaviš prije ili nakon testiranja uvjeta, mogu biti korisni pa makar samo zato da ukloniš jednu jedinu liniju koda po putu - i to ne zbog "kraćeg programa" (ne podržavam pisanje kriptičnog koda koji samo "cool" izgleda, a što, da, C omogućava!) nego zato što zbog promijenjene logike testa imaš optimizaciju koda i jednu liniju manje za izvršiti, a to može biti značajna ušteta unutar petlje.
Koliko ti to zaista vremena oduzima (u odnosu na sve ostalo u procesu razvoja neke aplikacije) pa da je nužno uvoditi takvu neurednost i nečitkost u izvorni kôd?
i++ i ++i nije pitanje (ne)urednosti nego logike koda. i++ vs. i=i+1 je stvar navike. "Nešto+1" je česta situacija u kodu (od petlji na dalje) pa je i++ vrlo prepoznatljiv element koji u kodu vrišti "inkrementacija!". i=i+1 i i=i+11 je "uvećaj i za neki broj, ne nužno 1". A i duže se tipka. Pogotovo kad moraš utipkati i dvotočku.
Iskreno, ne kužim zašto se nisi uspio sprijateljiti s Pascalom. Strukturiranost pascala navlas je ista onoj C-a. Samo je čitkiji i pregledniji.
Nisu mi se sviđale dvotočke.
Šalu na stranu, C jednostavno nudi više. Fleksibilniji je.