Was sind typisierte Programmiersprachen?
Mein Dozent sagt immer, dass Java eine stark typisierte Sprache ist. Was bedeutet das?
5 Antworten
ALLE antworten (außer der mit dem wikipedia link) haben unwahrheiten.
man unterscheidet bei der typisierung hauptsächlichen zwischen
- stark (bsp.: python, haskell, clojure)
- statisch (bsp.: java, dart, c#, c)
- schwach (bsp.: c, javascript)
- dynamisch (bsp.: groovy, javascript, clojure)
es gibt noch hybride (bsp.: c#, dart, groovy)
starke typisierung -> daten können nicht einfach ohne explizite konversion ihre datentypen wechseln (bsp.: 1 + "1" == fehler)
statische typisierung -> datentypen werden bereits beim kompilieren geprüft
bsp.:
var num: Number = 2
num = "sssssssss" // fehler
schwache typisierung -> daten können ihren datentypen wechseln (bsp.: "1" + 1 == "11" oder "1" - 1 == 0)
dynamische typisierung -> du kannst jeder variable jede art von daten zuweisen
bsp.:
def x = 2 // x hat zahl
x = "walkdujiwakda" // x hat text
Stark Typisiert bedeutet dass eine Variable immer nur einen bestimmten Datentyp haben kann und auch nur solche Daten hier gespeichert werden können.
In einer stark Typisierten Sprache kannst du zB einer Integervariable keinen String übergeben oder umgekehrt.
Im Gegensatz ist das bei dynamisch Typisierten Sprachen durchaus möglich, wodurch eine Variable alle Möglichen Datentypen halten kann. Eine schwach typisierte Sprache ist ein Mittelding die sowohl dynamische als auch typisierte Datentypen erlaubt.
Der Vorteil von starker Typisierung ist, dass der Compiler die Möglichkeit hat so Fehler zu entdecken und zudem eine Funktion nur ganz bestimmte Datentypen übernehmen kann, was dem Programmierer erlaubt auf spezifische Checks des Datentyps zu verzichten.
In einer dynamisch Typisierten Sprache ist das nicht der Fall und das Programm muss zur Ausführungszeit bestimmen in welchem Kontext eine Bestimmte Operation stattfinden soll.
Typischer Fehler bei diesen Sprachen ist zB "3"+3. Hier muss der Compiler/Interpreter (dynamsiche Sprachen sind meist interpretierte Sprachen) unterscheiden ob diese Rechnung mit numerischen Datentypen oder als String Zusammenfügen gedacht ist. Je nach Interpretation ist das Ergebnis also 6 oder "33". Daher vermeidet man bei solchen Sprachen zB derartige Operatoren bewusst und gibt dem + zB eindeutig den nummerischen Kontext.
Eine 100% feste Definition gibt es nicht, allerdings zeichnet sich strong typing dadurch aus das du in der Regel nicht wirklich etwas an den Typen einer Variable oder ähnlichem verändern kannst. In der Regel wird schon beim kompilieren geprüft ob die Typen alle aus technischer Sicht so passen.
Bei Sprachen mit weak typing haben Variablen oft keinen festen Typ oder Datentypen werden bei Bedarf einfach umgewandelt ohne das der Programmierer das explizit angibt. Fehler aufgrund falscher Typen treten eventuell erst bei der Ausführung des relevanten Codes auf.
stark typsiert java:
String testString = "test"; oder ab java 16 var testString = "test"
schwach typisiert python:
testString = "test"
testString = 5
testString = true
waaait. sicher?
wie sicher biste dass ich var in java 11 nutzen kann? du rettest mir gerad glaube soo viel arbeit,
Jup. Such einfach mal nach "java var keyword" und du wirst sehen, dass überall steht, dass das seit Java 10 ein Ding ist.
du verwechselst statische mit starke und dynamische mit schwache typisierung
Zur Klarstellung: das var keyword hat nichts mit strong typing zu tun, es ist einfach nur eine praktische Hilfe damit man den Typ nicht selber festlegen muss, funktioniert an sich aber genau so als hätte man den Typ selber im Code festgelegt.
nur eben als beispiel wie starke typisierung mittels var aussehen kann. vorausgesetzt die instaziierung der variable ist direkt bei der deklaration
Ergänzung: Bei der Kompilierung wird der Datentyp erkannt. Dieser wandelt das dann wieder in die "normale" Schreibweise um.
Lies mal hier, wikipedia erklaert das ganz gut:
Das var Keyword gibts schon seit Java 10.