Dat is maar een kwestie van wat je cleaner vindt

Aangezien je juist meer aandacht moet besteden aan wat voor type iets is, komt er ook per definitie meer code in je applicatie te staan.
Als een functie een int verwacht, dan mag je 'm geen string geven. En dus wil je dat je een waarschuwing krijgt als je per ongeluk wel een string geeft.
Klopt, maar moet die waarschuwing per se bij het compileren komen? (Let er op dat de meeste weak-typed talen veel korter compileren) Of mag het ook bij het unit-testen opduiken? Want ook als het niet uitmaakt of het een int of string was krijg je in strong-typed omgevingen een waarschuwing.
Sterker nog, als je een functie overload voor ints en strings en je hebt dus syntactisch correcte code, hoeft dat nog niet te betekenen dat je ook semantisch goede code geschreven hebt. Daar kom je ook alleen maar met (unit-)testing achter.

Bij objecten is dit een nog veel belangrijkere eigenschap, je wilt namelijk weten wat het is waar je mee werkt.
Dat hangt er van af. De standaard containers in java konden tot de introductie van generics al niet gebruikt worden met type-informatie, het enige wat je wist was dat het een object was.
En class-casting kan ook fout gaan, je zou dat zelfs een vorm van weak-typing kunnen noemen.
Daarnaast heeft OO weinig nut als je geen strictere typechecking hebt; wat is het nut van een interface definitie als je ook een compleet ander object kan gebruiken dat toevalligerwijs een aantal functies met dezelfde naam implementeert?
Dat is denk ik in veel gevallen helemaal niet zo relevant. Bovendien kan je er wel degelijk achter komen en heb je de vrijheid niet de boel expliciet te checken waar het niet nodig is.
Als je nette php code wil schrijven dan zul je hier zelf op moeten checken. Je bent dus helemaal niet sneller klaar, dat geldt alleen als je ranzige code schrijft en nergens op controleert.
Je bent wel degelijk sneller klaar als het in de meeste gevallen niet uitmaakt. Voor de aanroep van een toString-methode hoef je niet te weten of iets een Object, een String of whatever is in Java. Het heeft toch wel een toString.
C is ook kut, maar in C++, C# of Java bijvoorbeeld ben je echt niet meer regels kwijt hoor.
Als je inderdaad van elke variabele zeker wilt weten wat het is, dan ben je niet meer code kwijt. De meeste winst in code komt sowieso niet door puur het overboord gooien van type-specificaties, maar meer vanwege allerlei andere shortcuts in de taal.
"nofi", maar als je al niet eens snapt waar strict typing handig voor is ben je imho ook nog niet echt zo'n ervaren programmeur, zeker als je ook nog eens gaat zeggen dat een reden om het te gebruiken is dat je je dan 1337 zou voelen. Dat is iets voor pubers.
Niettemin is het wel degelijk deels psychologisch. En ik ben niet de enige die dat vindt, bekende mensen als
Bruce Eckel en (volgens hem) Martin Fowler zeggen hetzelfde.
Je moet tenslotte toch wel testen, want weten dat iets compileert zegt je bij complexe applicaties vooral dat je geen syntactische fouten hebt gemaakt (ik wilde "typefouten" zeggen, maar dat woord is wat dubbelzinnig

), maar het zegt maar heel beperkt wat over de kwaliteit van je code.
Het voordeel dat PHP, Python, Perl etc hebben is dat je niet tientallen seconden op de compilatie moet wachten en dat je dus sneller aan het testen kan gaan.
Overigens zie ik in beide systemen voordelen en heb ik geen met geen van beide moeite ze te gebruiken.

Hier zijn trouwens nog wat meer
online discussies.
Als je aan de hand van de type-informatie moet achterhalen wat voor type een object is, moet je wellicht ook wat aan je naamgeving doen, hoewel ik het wel met je eens ben dat het er wel
nog duidelijker van kan worden.
[
Voor 8% gewijzigd door
ACM op 13-11-2005 10:43
]