{"id":12555,"date":"2023-08-22T17:18:46","date_gmt":"2023-08-22T15:18:46","guid":{"rendered":"https:\/\/www.q-software-solutions.de\/blog\/?p=12555"},"modified":"2023-08-22T17:18:49","modified_gmt":"2023-08-22T15:18:49","slug":"ich-glaube-ich-gehe-auf-nen-trip","status":"publish","type":"post","link":"https:\/\/www.q-software-solutions.de\/blog\/2023\/08\/ich-glaube-ich-gehe-auf-nen-trip\/","title":{"rendered":"Ich glaube, ich gehe auf &#8217;nen Trip"},"content":{"rendered":"\n<p>Mit einer von mir bisher wenig gebrauchten PS. Ocaml aka F#. Warum? Nun ich w\u00fcrde gerne Smalltalk benutzen, aber ich m\u00f6chte auch so viel wie m\u00f6glich Compilerunterst\u00fctzung gegen Typos und andere Fehler nutzen. Ich denke mir, was der Computer testen kann, soll er auch testen. Ich mag es weiterhin nicht, mich zu wiederholen, als w\u00e4re ich eine gesprungene Schallplatte: <br><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LongPathToSomeJavaClass&lt;withTemplate1, withTemplate2> = myClass = new LongPathToSomeJavaClass&lt;withTemplate1, withTemplate2>()<\/code><\/pre>\n\n\n\n<p>Ja, ich wei\u00df, man braucht es nach dem New nicht mehr so zu schreiben.  Was mir auch nicht so gef\u00e4llt, wenn ich die Methoden in OO-Weise aufliste MyList.map(some function).filter(someCondition) &#8230;<br><br>Und ja, seiteneffektfreie Funktionen sind auch sch\u00f6n zu haben. IM Vergleich sieht <br>F# so aus: <br><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let mutable i = 1\nin\n    let rec loop() =\n        printf \"i= %d >\" i \n        let input = Console.ReadLine()\n        if input = \"exit\" then \n            exit(0)\n        else \n            printfn \"You typed: %s\" input\n            i &lt;- i + 1\n            loop()\n\n\nloop()<\/code><\/pre>\n\n\n\n<p>Es ist typsicher, ohne  dass man es deklarieren mu\u00df. Man kann aber:<br>Also kann ich auch schreiben let mutable i:int = 1. Auf der anderen Seite ist e s nicht so jerkish wie Haskell: http:\/\/learnyouahaskell.com\/input-and-output.<br><br>Ich finde, man kann es ziemlich &#8222;locker runter lesen &#8211; und verstehen. Mir gef\u00e4llt vor allem auch ein Schl\u00fcsselwort wie &#8218;mutable&#8216;, damit teilt man F# mit, hey ich werde das \u00e4ndern und man macht es dann einfach (i &lt;- i+1)<br><br>Und vor allem mag ich es, wenn man Daten auch in Objekte packen kann, mit Polymorphismus (die Haskellianer verstehen etwas anderes als der Rest der Welt darunter) . Ich sehe hier wirklich eine Obermenge von Programmerweisen.<br><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Simpel und &#8222;dumm&#8220; prozedural let a &#8230; let b let c <\/li>\n\n\n\n<li>funktional (keine Seiteneffekte, keine \u00dcberraschungen bei Aufruf von Funktionen<\/li>\n\n\n\n<li>objektorientiert (da kenne ich mich nun mal am besten aus und mir kommt es in meinem Programm am weitesten entgegen.<br><\/li>\n<\/ol>\n\n\n\n<p>Ich schrieb ja  oben von Smalltalk, ich kann viel von OCaml auch in Smalltalk bekommen (schlie\u00dflich sind Bl\u00f6cke nicht anderes als Funktionen.  Aber nichts warnt mich w\u00e4hrend der Entwicklung ,wenn so was passiert (pseudo code)<br><\/p>\n\n\n\n<p><br><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aHouse := aCrodocile\n.\n.\n.\naHouse openDoor. <\/code><\/pre>\n\n\n\n<p>Ja, die IDES werden einen vielleicht warnen, aber im Endeffekt, wird uns zur Laufzeit mitgeteilt, da liegst&#8217;e mit dem Typ aber daneben. Das kann einem in Ocaml, F# und Haskell nicht passieren. Weithin passt F# komplett in die .NET Welt. Mir w\u00e4re kein Smalltalk bekannt, f\u00fcr das das gilt, ja es gab mal ich glaube IronSmalltalk oder so, aber AFAIK gibt es derzeit keine Unterst\u00fctztes auf Windows. Ich glaube eine Kombination in einer Sprache, die einen nicht bevormundet ist eine der besten L\u00f6sungen. Ich werde  mal sehen, wohin mich dieser Trip f\u00fchrt, vielleicht liege ich falsch. <\/p>\n\n\n\n<p>Es w\u00e4re nicht das erste Mal und nicht das letzte Mal. Ich werde mal sehen wie&#8217;s l\u00e4uft und ich denke, man kann in diesem Blog auch nachlesen, wenn ich meine Meinung zu etwas ge\u00e4ndert habe. Vielleicht passiert es wieder mit F#, vielleicht auch nicht &#8230;<\/p>\n\n\n\n<p>F\u00fcr mich als Einzelprogrammierer gibt es ein paar Wege. Ich kann wie Millionen von andere auf die gro\u00dfen Spieler setzen, ich kann etwas nehmen, was f\u00fcr meinen Bereich am besten zu gebrauchen ist und ich kann nehmen, was mir eher gef\u00e4llt und auch wenn ich es von Eiffel anders kenne, sehe ich durchaus einen Punkt in dem Sprichwort: &#8222;In der K\u00fcrze liegt die W\u00fcrze&#8220; <br><br>Man kann den Code ja mal  in Java, C# oder C++ programmieren und schauen, wie es dann aussieht &#8230;  <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit einer von mir bisher wenig gebrauchten PS. Ocaml aka F#. Warum? Nun ich w\u00fcrde gerne Smalltalk benutzen, aber ich m\u00f6chte auch so viel wie m\u00f6glich Compilerunterst\u00fctzung gegen Typos und andere Fehler nutzen. Ich denke mir, was der Computer testen kann, soll er auch testen. Ich mag es weiterhin nicht, mich zu wiederholen, als w\u00e4re [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7979],"tags":[],"class_list":["post-12555","post","type-post","status-publish","format-standard","hentry","category-programmierung"],"_links":{"self":[{"href":"https:\/\/www.q-software-solutions.de\/blog\/wp-json\/wp\/v2\/posts\/12555","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.q-software-solutions.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.q-software-solutions.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.q-software-solutions.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.q-software-solutions.de\/blog\/wp-json\/wp\/v2\/comments?post=12555"}],"version-history":[{"count":0,"href":"https:\/\/www.q-software-solutions.de\/blog\/wp-json\/wp\/v2\/posts\/12555\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.q-software-solutions.de\/blog\/wp-json\/wp\/v2\/media?parent=12555"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.q-software-solutions.de\/blog\/wp-json\/wp\/v2\/categories?post=12555"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.q-software-solutions.de\/blog\/wp-json\/wp\/v2\/tags?post=12555"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}