Pogledajte određenu poruku
Staro 13. 01. 2006.   #35
nesh
član
Certified
 
Avatar nesh
 
Datum učlanjenja: 18.08.2005
Lokacija: Niš
Poruke: 80
Hvala: 1
0 "Hvala" u 0 poruka
nesh is on a distinguished road
Pošaljite ICQ poruku za nesh Pošaljite poruku preko AIM za nesh Pošaljite poruku preko Yahoo za nesh
Default

Citat:
Originalno napisao bojan_bozovic
@ivanhoe

Upravo u tradicionalnim jezicima ne brines o tipovima, a u skript jezicima moras recimo

class nesto {
var $broj1;

function promenibroj1($vrednost) {
if (is_float($vrednost){
$this->$broj1=$vrednost;
}
}
}
Ček, ček, ...

Python:
Kôd:
>>> a=1
>>> a+="1"

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in -toplevel-
    a+="1"
TypeError: unsupported operand type(s) for +=: 'int' and 'str'
Kôd:
class Foo:
  def __init__(self):
    self.broj1 = 1

  def promeni_broj(self, vrednost):
    self.broj1 = vrednost

  def promeni_broj2(self, vrednost):
    # safe
    try:
      self.broj1 = int(vrednost)
    except ValueError, err:
      # vrednost nije int, do something
promeni_broj2 je ekvivalentna sa:
Kôd:
void promeni_broj2(int vrednost) {
  broj1 = vrednost;
}
I šta je tu gore od "strongly typed" jezika, ili je try:...except: blok komplikovan? Osim sitnice, da kada dobijem (nekako) pogrešan podatak (npr. prosledim string "ABCD" umesto int-a, vrednost će imati vrednost pointera na string bez ikakve poruke o grešci.

Tačnije kod "strongly typed" jezika ja moram unapred i kroz ceo kod da brinem o tipu podataka (a i veličini osim ako ne radim dinamičku alokaciju memorije što stvara druge probleme), kada koristim "loose typed" jezik brinuću o tipu podatka samo tamo gde taj podatak koristim.

BTW zar PHP5 nije dobio nesto slično za rad sa exception-ima?

Najveća razlika između "skript" jezika i "compiled" jezika je u brzini (koja već odavno nije toliko bitna - hardver je daaaaaleko jeftiniji od programerskog vremena) i velike razlike u brzini razvoja aplikacija (za par redova veličine na štetu "compiled" jezika). Da ne pominjem "čuda" kao metaklase, dinamičko generisanje metoda, .....

Bottom line je da kod "strongly typed" jezika greška u tipu prosleđenog podatka (ako se provuče, a moguće je) će dovesti do core dump-a (ili ako je Win u pitajnju čak i do BOD-a), dok će "loose typed" jezik "baciti" exception koji će lako moći da bude "uhvaćen" i obrađen tamo gde treba (ako ne, onda je to bug, a podaci koji budu prijavljenu u exp (stack trace i sl.) će biti sasvim dovoljni da se "nalovi" mesto gde je do toga došlo - mnogo lakše nego da provodim vreme uz debager "loveći" mesto).

I kao što neko reče A right tool for the right job™. Sigurno neću pisati OS u Python-u, ali za web app (a o tome je ovde priča) koristiti C/C++ je definitivno overkill.

Korisno štivo: http://www.sitepoint.com/article/typ...dynamic-typing

p.s. Python (za ostale nisam siguran - ne koristim ih sada previše) ima daleko bolju podršku za exception-e od C++ i Jave IMHO. Takođe za Python postoji pychecker koji moža da uradi (skoro) sve provere oko tipova podataka i sl. kao da se koristi "strongly typed" jezik.

p.p.s. "strongly typed" se ne odnosi na Javu/C# jer su kod njih uspeli da isprave dosta problema sa C/C++.

p.p.p.s. Moj razvojni put se kretao: Z80 asm -> MC68K asm -> C -> (C++, perl, PHP) -> Python. Tako da sam prilično upoznat sa prednostima (a i manama) većine njih.
__________________
Nebojša Đorđević - nesh
Lead developer / Younify
nesh je offline   Odgovorite uz citat