快递什么时候上班| 眼睛老是流眼泪是什么原因| 心脏房颤吃什么药最好| 什么病可以鉴定病残| 熬夜伤什么| 丹毒病是什么原因引起的| 男人小便刺痛吃什么药| 儿茶酚胺是什么| 见多识广是什么生肖| 女人阴部黑是什么原因| 双向情感障碍吃什么药| 凭什么| 蚊香灰有什么作用| 癸未日五行属什么| 第一次是什么感觉| 黄果树是什么树| 六度万行 是什么意思| 老子姓什么| 蝉是什么生肖| 胃病忌什么| 925是什么意思| 国师是什么意思| 妖是什么意思| 清洁度三度什么意思| 什么食物含维生素c最多| 女人吃什么补元气最快| 手突然抽搐是什么原因| 酒喝多了喝什么解酒| 精血亏虚吃什么中成药| 5月3日什么星座| 心脏不好吃什么药| 皮皮虾吃什么| 痛风不能吃什么食物| 笏是什么意思| 口差念什么| hpv亚临床感染是什么意思| 心率低有什么危害| vodka是什么酒| 梦见猫咬我是什么意思| 干事是什么职务| 2010年属虎的是什么命| 脓毒血症是什么原因引起的| 什么是单反相机| 长期戴耳机有什么危害| 扁桃体发炎不能吃什么| 肚子疼吃什么药| 风湿热是什么病| 接触是什么意思| 来大姨妈肚子疼是什么原因| as是什么病| 得宫颈癌的前兆是什么| 夜盲症是什么意思| 什么是乳胶床垫| 胎盘老化是什么原因造成的| 胎儿左心室灶状强回声是什么意思| 断片是什么意思| 什么好像什么| 师长是什么意思| 吃头孢不能吃什么水果| 心机血缺血是什么症状| 飞沙走石是什么意思| 8月15号是什么日子| 黄疸挂什么科| 血氧低吃什么提高的快| 晚上七八点是什么时辰| 6月29什么星座| 扁桃体发炎吃什么消炎药| 沙漠玫瑰什么时候开花| 为什么会长肉粒| 脸黄是什么原因造成的| 大力丸是什么| obl是什么意思| 胎儿顶臀长是什么意思| 流金岁月什么意思| 在什么后面| 喜欢咬指甲是什么原因| 氧化锆是什么材料| 石斛有什么功效和作用| 脱头发严重是什么原因引起的| 柳絮吃了有什么好处| 放屁臭鸡蛋味什么原因| 噗呲是什么意思| 胳膊上种花是什么疫苗| ube手术是什么意思| 泡泡是什么| 卖淫是什么| 复活节是什么意思| 贲门ca是什么意思| 孕妇吃黑芝麻对胎儿有什么好处| 个个想出头是什么生肖| 头疼头晕是什么原因| 喉咙一直有痰是什么原因| 戴字五行属什么| bpd是胎儿的什么意思| 为什么夏天越来越热| 梦见偷菜是什么意思| 3什么意思| 二十年婚姻是什么婚| 紫癜是什么| 孕期吃什么好| 出汗多是什么原因| 25度天气穿什么衣服| 腊八粥是什么节日| 女人什么时候最想男人| 肌电图主要检查什么病| 为什么睡觉会突然抖一下| 尸臭是什么味道| hcg什么时候查最准确| 波立维什么时间吃最好| 临期是什么意思| 阴唇外翻是什么原因| 02年属什么| 梦到发大水是什么意思| 大象喜欢吃什么| 干眼症是什么| 氢氧化钠是什么| 并蒂是什么意思| 钟馗是什么意思| 眼睛流水是什么原因| 尿胆原normal是什么意思| 梦见很多棺材是什么征兆| 小蓝是什么| 待客是什么意思| 是什么标点符号| 肌肉抽筋是什么原因| 犯了痔疮为什么老放屁| grace是什么意思| 吃饭吧唧嘴有什么说法| 化疗期间吃什么水果好| 03年属什么的| 更年期什么症状| 阶段性是什么意思| 什么欢快| 间断性是什么意思| twins是什么意思| 什么屈膝| 胸闷要做什么检查| 古代地龙是什么| 经常打嗝是什么原因| 蜘蛛代表什么生肖| 277是什么意思| 诺如病毒吃什么食物| 月全食是什么意思| 功能性消化不良吃什么药| 保险属于什么行业| 一个口一个犬读什么| 灭活疫苗是什么意思| 一个虫一个圣读什么| 金标是什么意思| 解脲脲原体是什么病| 过敏性鼻炎引起眼睛痒用什么药| 谐星是什么意思| 命脉是什么意思| 1966年是什么命| 脾胃不好吃什么| 6月7日是什么星座| 心外科是看什么病的| 四个金读什么| 吃什么水果能长高| braun是什么品牌| 小孩嗓子哑了吃什么药| 补气养阴是什么意思| 孕妇吃什么菜好| 什么水果对眼睛好| 脚底肿是什么原因引起的| adem是什么病| 尿的颜色有点红褐色是什么原因| 心脏呈逆钟向转位什么意思| 截石位是什么意思| 开是什么生肖| 美国为什么不敢打伊朗| 什么东西最吸引蛇| 今年65岁属什么生肖| 月经期吃什么| 突然勃不起来是什么原因造成的| 99年属兔的是什么命| 糖尿病人可以吃什么零食| 1983年属什么生肖| 酷暑是什么意思| 省委巡视组组长什么级别| 什么情况下需要打破伤风针| 阳性阴性是什么意思| 发烧不退烧是什么原因| 肚子下面是什么部位| 阿司匹林和阿莫西林有什么区别| 为什么血是红色的| 大腿内侧疼痛什么原因| 为什么全麻手术后不能睡觉| 经期吃凉的东西有什么影响| 病毒性感冒吃什么药效果好| 昭字五行属什么| 两个月小猫吃什么食物| 福州有什么好吃的| 早搏是什么意思| 单人旁的字有什么| 屈打成招是什么意思| 晚上9点半是什么时辰| 陈旧性心梗是什么意思| 健康证是什么| 米是什么结构| 狂风暴雨是什么意思| 中午喜鹊叫有什么预兆| 肚子胀胀的是什么原因| 利大于弊是什么意思| 什么的枝干| 吃什么有饱腹感还减肥| 截瘫是什么意思| 木林森是什么品牌| 一进大门看见什么最好| 孕妇可以吃什么感冒药| 准生证需要什么材料| 毒瘾发作有什么症状| 兰陵为什么改名枣庄| 62年的虎是什么命| 鼠和什么生肖最配| 原发性高血压什么意思| 高血糖是什么原因引起的| 1981年是什么命| 指甲不平有凹凸是什么原因| 跃字五行属什么| 炖牛肉什么时候放盐| 脾胃气虚吃什么药| 晟读什么| 闪购是什么意思| 全身发冷是什么原因| 宝宝大便有泡沫是什么原因| 孟姜女姓什么| 得偿所愿什么意思| 朝鲜为什么那么落后| 女性阴部痒是什么原因| 恋童癖是什么意思| 吃什么补脑子增强记忆力最快| 尖嘴猴腮是什么生肖| 正常的心电图是什么样的图形| 梦到知了猴是什么意思| 美字五行属什么| examine什么意思| 宝宝感冒流鼻涕吃什么药| 失责是什么意思| 关节炎吃什么药| 免疫力是什么意思| 做美甲师容易得什么病| 老年人口干是什么原因| 发炎是什么原因引起的| 46什么意思| 脸上突然长痣是什么原因| 什么补钙| 手汗症是什么原因| 舒坦是什么意思| 产褥期是什么意思| 上午十点半是什么时辰| 胆汁酸高吃什么药| 腹泻吃什么药见效最快| 梦见脱发是什么征兆| 凉皮什么做的| 三点水一个兆读什么| 什么蔬菜补铁效果最好| 暂住证和居住证有什么区别| 牙痛吃什么药最好| 小孩手指脱皮是什么原因| 金庸原名叫什么| acer是什么牌子| 筋膜炎吃什么药好得快| 糖尿病人晚餐吃什么最好| 百度Zum Inhalt springen

小鹿叮叮游泳纸尿裤发布 入水不膨胀舒适不侧漏

aus Wikipedia, der freien Enzyklop?die
百度 最小的宝宝出生时记录在英寸,但Ata短了近两英寸。

Eine Typisierung dient in der Informatik dazu, dass die Objekte (hier Objekte im mathematisch-abstrakten Sinne verstanden) der Programmiersprachen, wie z. B. Variablen, Funktionen oder Objekte (im Sinne der objektorientierten Programmierung) korrekt verwendet werden. Ein Ziel der Typisierung ist die Vermeidung von Laufzeitfehlern.

Der Begriff Typsystem bezeichnet in der Informatik eine Komponente, die in Programmiersprachen zum Einsatz kommen kann, um den Wertebereich von Variablen einzuschr?nken. Programmiersprachen, die über ein Typsystem verfügen, nennt man typisiert. Je nach Auspr?gung des Typsystems spricht man gelegentlich auch von stark typisierten oder schwach typisierten Sprachen. Durch die Typisierung soll sichergestellt werden, dass auf den Inhalten von Variablen keine Operationen ausgeführt werden, die syntaktisch oder semantisch fehlerhaft sind. Ein Typsystem wird durch folgende Bestandteile gebildet:

  • Die Typen selbst, die entweder mittels Typdefinitionen erzeugt oder in der jeweiligen Sprache fest integriert (als primitive Datentypen) sind.
  • Die M?glichkeit, Programmelemente (wie Variablen, Methodenparameter usw.) mittels Typannotation mit einem bestimmten Typ zu deklarieren.
  • Regeln, nach denen die Werte von Ausdrücken einem bestimmten Typ zugeordnet werden.
  • Regeln zur Prüfung der Zuweisungskompatibilit?t von Typen.
  • Optional weitere Sprachbestandteile wie typbezogene Operatoren (z. B. ?instanceof“ in diversen Sprachen) oder eine Reflection API zur Ermittlung und Prüfung von Typinformation zur Laufzeit.

Klassifizierung von Typsystemen

[Bearbeiten | Quelltext bearbeiten]

Typsysteme lassen sich entlang vier Dimensionen klassifizieren:

  • starke Typisierung und schwache Typisierung (englisch weak typing)
    Wie streng unterscheidet die Sprache die Typen? Welche Datentypen k?nnen ineinander umgewandelt werden? Erlaubt sie implizite Typumwandlungen? Erlaubt sie unsichere Typumwandlungen, bei denen z. B. Werte verloren gehen k?nnen?
  • dynamische Typisierung (dynamic typing) und statische Typisierung (static typing)
    Typprüfungen k?nnen zur übersetzungszeit oder zur Laufzeit vorgenommen werden. Im ersten Fall spricht man von statischer Typprüfung, im zweiten von dynamischer Typprüfung. Statische Typprüfungen erlauben das Auffinden von Zuweisungsfehlern vor der Laufzeit, w?hrend sie bei dynamischer Typisierung erst zur Laufzeit auffallen. Dafür erlaubt Letztere ein m?chtigeres Verhalten wie die korrekte Verarbeitung eigentlich inkompatibler Typen und Erweiterungen zur Laufzeit.
  • explizite Typisierung (explicit typing) und implizite Typisierung (implicit typing)
    Werden die Datentypen explizit genannt oder per Typableitung (type inference) ermittelt?
  • optionale Typisierung (optional typing)
    Typ-Annotationen werden zur Unterstützung der Programmierer genutzt, haben aber keine Auswirkungen auf die tats?chliche Umsetzung durch den Compiler zur Laufzeit.

Zu den Aufgaben eines Typsystems geh?ren:

  • Erkennung von Typverletzungen bei der übersetzung und Ausführung. Die Typinformation kann dabei als eine redundante Information aufgefasst werden, die verhindert, dass Variablen Werte zugewiesen werden, welche die betreffende Variable niemals annehmen sollte (sogenannte Typinvarianten). Sie verhindert so die Ausführung von Operationen auf den Inhalten dieser Variablen, die entweder unm?glich oder aus programmlogischen Gründen nicht sinnvoll ist.
  • Typumwandlung (type conversion), also Umwandlung bzw. Bef?rderung und Degradierung von Typen (type promotion, type demotion). In vielen objektorientierten Sprachen stehen hierfür die drei M?glichkeiten up cast, down cast und cross cast zur Verfügung.

Die folgenden Beispiele sollen die Klassifizierung verdeutlichen; die Einordnung von Sprachen in diese Kategorien ist aber bis zu einem gewissen Grad subjektiv (C++ z. B. ist st?rker typisiert als C, aber schw?cher als OCAML), und viele Typsysteme haben je nach Verwendung mehrere Aspekte (Polymorphe Werte, Typumwandlung etc.).


keine: x86 Assembler

 mov ah, 0x0e                      ; Weise dem oberen Byte des Registers ax den Wert 14 zu.
 mov al, '!'                       ; Weise dem unteren Byte den Wert des Zeichens '!' zu.
 int 0x10                          ; Erzeuge Interrupt 0x10 um das Zeichen '!' auszugeben.


Statisch, explizit, schwach: C

 int x;                            // Weise x explizit den Typ int (Ganzzahl) zu.
 char *str = x;                    // Weist str als Anfangsadresse den Wert von x zu.
                                   // Da x undefiniert ist, kann die Ausgabe von str zum Programmabsturz führen.
 x = &str;                         // Weist x die Speicheradresse von str zu.
 *(char **)x = "text";             // Schreibt die Anfangsadresse des Strings "text" in die Adresse von str.
 printf("%s", str);                // Ausgabe von "text"


Statisch und dynamisch, explizit und implizit, stark: C#

 object addmax(object a, int b, short c)
 {
     int max = Math.Max(b, c);     // Aufruf von Max(int b, int c) der Klasse Math
     int sum = (int)a + max;       // InvalidCastException falls a nicht konvertierbar,
                                   // NullReferenceException falls a undefiniert
     return sum;                   // implizite Konvertierung (Boxing) von int zu object
 }


Statisch, explizit und implizit, stark: Java

 Integer addmax(Object a, int b, short c) {
    int max = Math.max(b, c);      // Aufruf von max(int b, int c) der Klasse Math
    int sum = (int)a + max;        // ClassCastException falls a nicht konvertierbar,
                                   // NullPointerException falls a undefiniert
    return sum;                    // implizite Konvertierung (boxing) zu Integer
 }


Statisch, implizit, stark: OCAML

 let myAdd a b =                (* Wir definieren eine Funktion, die zwei nicht n?her bezeichnete Werte nimmt *)
   a +. b;;                     (* +. ist der Additionsoperator für Gleitkommazahlen *)
                                (* val myAdd : float -> float -> float = <fun> *)
                                (* Ocaml hat von selbst erkannt, dass diese Funktion zwei Gleitkommazahlen erwartet und eine zurückgibt *)
 myAdd 1 2.5;;                  (* Addiere zwei Zahlen, aber eine davon ist eine Ganzzahl *)
                                (* '''Compilerfehler:''' This expression has type int but is here used with type float *)
 myAdd (float_of_int 1) 2.5;;   (* Addiere zwei Zahlen, wandle Ganzzahl zuvor in Gleitkommazahl um, ergibt 3.5 *)

 let x = object method a = 10 end;;               (* definiere ein Objekt mit einer Methode a, die den Wert 10 zurückgibt *)
 let y = object method a = 10 method b = 11 end;; (* definiere ein Objekt mit zwei Methoden a und b, die jeweils unterschiedliche Ints zurückgeben. *)
 let l = [x;(y :> <a:int>)];;                     (* speichere x und y in einer Liste. y wird dabei in den Typ von x umgewandelt *)


Statisch und dynamisch, explizit, stark: Pascal

 var a,b : integer;
       c : char;
 begin
   a := 33;                        { Weise a den ganzzahligen Wert 33 zu. }
   c := chr(a);                    { Weise c den Buchstaben zu, der dem ASCII-Wert von a entspricht. }
   b := ord(c);                    { Weise b den ASCII-Wert von c zu. }
   writeln(b, c);                  { Gibt "33 !" aus. }
   b := a / 2;                     { Laufzeitfehler, da die Division keinen ganzzahligen Wert ergibt. }
 end


Dynamisch, implizit, schwach: Perl

 $x = 1.5;                         # x ist nicht die Zeichenkette "1.5", sondern die Zahl 1.5
 $x = $x + "4-2";                  # x ist nun 5.5 da nur der Zahlenteil von "4-2", also 4 addiert wurde
 $x = $x + "text";                 # x ist unver?ndert, da "text" nicht mit einer Zahl beginnt


Dynamisch, implizit, schwach: PHP

 $x = 1;                           // Weise x explizit den Wert 1 zu.
 $x = 2 + "42";                    // Addiere eine Zahl und eine Zeichenkette,
                                   // wandle dazu die Zeichenkette in eine Zahl um
                                   // $x ist jetzt 44
 $x = 2 + "Ich bin keine Zahl";    // Wie oben, ungültige Zeichenkette wird zu 0 umgewandelt
                                   // $x ist jetzt 2


Dynamisch, implizit, stark: Python

 x = 1                             # Weise x explizit den Wert 1 zu.
 x = 2 + "42"                      # Addiere eine Zahl und eine Zeichenkette, Laufzeitfehler ("TypeError")
 x = 2 + int("42")                 # Addiere eine Zahl und eine Zahl, die aus einer Zeichenkette erstellt wird
                                   # x ist jetzt 44
 x = 2 + int("Ich bin keine Zahl") # Laufzeitfehler ("ValueError")


Statisch und dynamisch, explizit, stark: Pike

 int x = 1;                        // Definiere x als int und weise explizit den Wert 1 zu.
 x = 2 - "42";                     // Subtrahiere eine Zeichenkette von einer Zahl, Kompilier- oder Laufzeitfehler ("Bad argument 2 to `-.")
 x = "42";                         // Weise x den wert "42" zu. Kompilierfehler ("Bad type in assignment")
 x = 2 + (int)"42";                // Addiere eine Zahl und eine Zahl, die aus einer Zeichenkette erstellt wird
                                   // x ist jetzt 44
 x = 2 + (int)"Ich bin keine Zahl" // Ungültige Zeichenkette wird zu 0 umgewandelt
                                   // x ist jetzt 2
  • Luca Cardelli: Type Systems. In: Allen B. Tucker (Hrsg.): The Computer Science and Engineering Handbook. CRC Press, Boca Raton FL 1997, chapter 103, S. 2208–2236.
  • Benjamin Pierce: Types and Programming Languages. MIT Press, 2002
  • Robert Harper: Practical Foundations for Programming Languages 2nd Edition. Cambridge University Press, 2016 (online [PDF; 1,9 MB]).
悬是什么意思 什么是巧克力囊肿 变化无穷是什么生肖 胃反酸什么原因 家是什么
21三体高风险是什么意思 减肥可以吃什么肉 价值是什么 嘴臭是什么原因引起的 什么东西进去是硬的出来是软的
蜜蜡和琥珀有什么区别 农历闰月有什么规律 冷笑是什么意思 治疗狐臭最好的方法是什么 着床出血是什么样子的
一诺千金是什么生肖 政协主席什么级别 水烧开后有白色沉淀物是什么 高密度脂蛋白胆固醇偏高是什么意思 大黄和芒硝混合外敷有什么作用
焱字五行属什么hcv8jop9ns6r.cn 伐木是什么意思hcv9jop2ns1r.cn 佟丽娅什么民族hcv9jop3ns8r.cn 左肾囊性灶是什么意思hcv7jop4ns7r.cn 女性肠痉挛有什么症状hcv7jop7ns1r.cn
玻璃体混浊吃什么药好hcv7jop9ns5r.cn 去医院看头发挂什么科hcv9jop8ns1r.cn p53野生型是什么意思hcv7jop6ns0r.cn 八哥吃什么食物chuanglingweilai.com ie是什么hcv8jop8ns8r.cn
双肾囊肿什么意思hcv8jop6ns3r.cn 头上出汗多是什么原因hcv8jop6ns5r.cn 所谓是什么意思xinjiangjialails.com 冷泡茶用什么茶叶chuanglingweilai.com 异质性是什么意思hcv9jop7ns9r.cn
肉是什么结构的字hcv9jop5ns3r.cn 染色体变异发生在什么时期weuuu.com 侮辱什么意思hcv9jop3ns8r.cn 搪瓷是什么材料hcv8jop3ns1r.cn 动员是什么意思xianpinbao.com
百度