{"id":4169,"date":"2018-05-28T22:57:30","date_gmt":"2018-05-28T20:57:30","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=4169"},"modified":"2018-05-28T22:57:30","modified_gmt":"2018-05-28T20:57:30","slug":"automatisches-feststellen-der-typen-mit-var","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2018\/05\/automatisches-feststellen-der-typen-mit-var\/","title":{"rendered":"Automatisches Feststellen der Typen mit var"},"content":{"rendered":"<p>Java 10 hat eine Erweiterung gebracht, dass der Variablentyp bei gewissen Deklarationen entfallen kann und wir einfach stattdessen var nutzen k\u00f6nnen:<\/p>\n<p><strong>var<\/strong> name = &#8222;Barack Hussein Obama II&#8220;;<\/p>\n<p><strong>var<\/strong> age = 48;<\/p>\n<p><strong>var<\/strong> income = 400000;<\/p>\n<p><strong>var<\/strong> gender = &#8218;m&#8216;;<\/p>\n<p><strong>var<\/strong> isPresident = false;<\/p>\n<p>Wir sehen, dass im Gegensatz zu unserem vorherigen Beispiel nicht mehr die Variablentypen wie String oder int bei der Variablendeklaration explizit im Code stehen, sondern nur noch var. Das hei\u00dft allerdings nicht, dass der Compiler die Typen offen l\u00e4sst! Der Compiler braucht zwingend die rechte Seite neben dem Gleichheitszeichen, um den Typ feststellen zu k\u00f6nnen, das nennt sich Local-Variable Type Inference. Daher gibt es in unserem Programm auch eine Unstimmigkeit, n\u00e4mlich bei var income = 400000, die gut ein Probleme mit var aufzeigt: die Variable ist kein double mehr wie vorher, sondern 400000 ist ein Ganzzahl-Literal, weshalb der Java-Compiler der Variablen income den Typ int gibt.<\/p>\n<p>Die Nutzung von var soll Entwicklern helfen, Code k\u00fcrzer zu schreiben, insbesondere, wenn der Variablenname schon eindeutig auf den Typ hinweist. Finden wie eine Variable text vor, ist der Typ String naheliegend, genauso wie age ein int ist, oder ein Pr\u00e4fix wie is oder has auf eine boolean-Variable hinweist. Aber wenn var auf die Kosten der Verst\u00e4ndlichkeit geht, darf die Abk\u00fcrzung nicht eingesetzt werden. Auch der Java-Compiler gibt Schranken:<\/p>\n<ul>\n<li>var ist nur dann m\u00f6glich, wenn eine Initialisierung einen Typ vorgibt. Eine Deklaration der Art var age; ohne Initialisierung ist nicht m\u00f6glich und f\u00fchrt zu einem Compilerfehler.<\/li>\n<li>var kann nur bei lokalen Variablen eingesetzt werden, wo der Bereich \u00fcberschaubar ist. Es gibt aber noch viele weitere Stellen, wo in Java Variablen deklariert werden \u2013 dort ist var nicht m\u00f6glich.<\/li>\n<\/ul>\n<p>Sprachvergleich:\u00a0Java ist mit var relativ sp\u00e4t dran.<a href=\"#_ftn1\" name=\"_ftnref1\">[1]<\/a> Andere statisch getypte Sprachen bieten die M\u00f6glichkeit schon l\u00e4nger, etwa C++ mit auto oder C# auch mit var. Auch JavaScript nutzt var, allerdings in einem v\u00f6llig anderen Kontext: in JavaScript sind Variablen erst zur Laufzeit getypt, und alle Operationen werden erst zur Ausf\u00fchrungszeit gepr\u00fcft, w\u00e4hrend Java die Typsicherheit mit var nicht aufgibt.<\/p>\n<p><a href=\"#_ftnref1\" name=\"_ftn1\">[1]<\/a> http:\/\/openjdk.java.net\/jeps\/286<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java 10 hat eine Erweiterung gebracht, dass der Variablentyp bei gewissen Deklarationen entfallen kann und wir einfach stattdessen var nutzen k\u00f6nnen: var name = &#8222;Barack Hussein Obama II&#8220;; var age = 48; var income = 400000; var gender = &#8218;m&#8216;; var isPresident = false; Wir sehen, dass im Gegensatz zu unserem vorherigen Beispiel nicht mehr [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11,107],"tags":[],"class_list":["post-4169","post","type-post","status-publish","format-standard","hentry","category-insel","category-java-10"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=4169"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4169\/revisions"}],"predecessor-version":[{"id":4170,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4169\/revisions\/4170"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=4169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=4169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=4169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}