A dinamikusan/statikusan típusos ugyanaz mint az erősen/gyengén típusos?
Nagyjából igen, de definíció szerint vannak apró eltérések.
Az erősen típusos nyelv az azt jelenti, hogy fordítási időben ismert a típusa. A statikus meg azt, hogy nem változik, állandó a típusa. A különbség akkor jelentkezik, amikor például külső helyről érkezik egy olyan adat, amit a tartalma alapján lehet csak típussá konvertálni (de ilyen az például, hogy C-ben és CPP-ben a malloc void-ot ad vissza, és azt is nekünk kell átkonvertálni). Ezek nem statikusak, mert Cast-olunk, azonban erősen típusosak, mert fordítási időben tudjuk, hogy mivé kell castolni, azaz mi a típusa.
Tehát nem ugyanaz a két fogalom, de nagyon erősen összefügg, és jellemző esetekben összetartoznak.
Porkoláb Zoltán tanár úr válasza:
Statikusan típusos: fordítási időben eldől mindek mi a típusa.
Erősen típusos: az adott típussal csak bizonyos műveleteket lehet
elvégezni.
A Python például dinamikus és erősen típusos.
if: a > b
z = 1
else:
z = "Hello"
x = y / z
Nem tudjuk előre (fordítási időben), hogy z milyen típusúlesz, de ha pl.
string akkor nem szabad osztani vele.
Azért ne teljesen a reinterpret_cast-ra gondoljál.
Velem SQL-ben például már előfordult, hogy egy karaktertömb mezővel
(string) osztottam, és ha az a string egy számot ábrázolt, akkor műkösött,
ha meg nem, akkor futási idejű hibát okozott.
Gera Zoltán tanár úr válasza:
A statikus esetben fordítási időben kell kiderülnie a típusnak. Az
erősen típusos ugyanakkor csak annyit jelent, hogy szigorúbb a típusrendszer,
mint a gyengénél hivatalosan. Ugyanakkor valóban, az erősnél az szokott lenni,
hogy nem lehet változtatni a típust menet közben.
Az öröklődés érdekes kérdés. Azért nem töri a statikus és erős típusosságot,
mert "minden rovar bogár, de nem minden bogár rovar". Statikus időben a
biztosat (rovar) feltételezi a rendszer és ennek megfelelően engedi a
műveleteket. Lehet, hogy menet közben esetleg az a rovar bogár is, de erre a
fordító nem számíthat és ennek megfelelően viselkedik. Szóval épp ezért nem
töri meg a fenti elveket.
Egyébként öröklődésnél virtual függvénnyel előfordulhat, hogy a leszármazott
műveleteit használjuk menet közben. De ha a leszármazott egyben az ős típussal
is rendelkezik, akkor nem töri meg az ős típus szemantikáját az, hogy egy
adott művelet felül lett definiálva, ezzel ki lett terjesztve.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!