Programmierblog von Johannes Dienst

Funktionen, die Funktionen zurückgeben, die Funktionen …

Posted by in clean code, funktionale Programmierung, funktionales Programmieren, JavaScript

Als ich mich das erste Mal mit funktionaler Programmierung beschäftigt habe, war mir überhaupt nicht klar, wo mir diese ganzen exotischen Konzepte nützen könnten. Inzwischen habe ich viel über dieses Paradigma gelernt und bei manchen Denkansätzen gab es einen richtigen AHA-Effekt. Ein interessanter Einsatz von Funktionen als Objekte liegt in Funktionen, die Funktionen generieren. Damit kann man sehr interessante Dinge anstellen. Genau das habe ich vor ein paar Wochen getan. Von der Lösung war ich richtig begeistert, die damit so einfach entstanden ist. Diese Begeisterung möchte ich gerne teilen! Das…read more

0

JavaScript-Strukturierung für HTML: Kopplung minimieren

Posted by in clean code, JavaScript

In der letzten Woche kam eine interessante Frage zum Aufbau einer modularen JavaScript-Codebase auf. Es ging vor allem darum, wie eine bestimmte Funktionalität auf unterschiedlichen HTML-Seiten aktiviert wird. Da es mehrere Module mit unterschiedlichen Features gibt, standen mehrere Ansätze zur Diskussion. Das Problem mit webpack In unserem Projekt werden alle Module mit webpack zu einer bundle.js zusammengefasst, die dann auf jeder Seite eingebunden wird. Das JavaScript ist modularisiert in ES2015 Modulen. Die Aktivierung der Funktionalität läuft über die Instanziierung von Klassen, deren Konstruktor über jQuery DOM-Elemente mit EventListenern versorgt. Soweit…read more

0

Grundlagen: Was ist Endrekursion?

Posted by in clojure, funktionale Programmierung, funktionales Programmieren, JavaScript

Rekursion ist ein mächtiges Konzept in der Programmierung, bei dem eine Funktion sich selbst aufruft. In meiner Studienzeit gab es einen witzigen Spruch: Informatikerhandbuch – Rekursion: Siehe Rekursion Dieser beschreibt treffend die Idee, eine Aufgabe mit einer sich selbst aufrufenden Funktion zu lösen. Ein Beispiel Wir starten mit einem kleinen Beispiel, das man sofort findet, wenn man nach Rekursion sucht. Der Fibonacchi-Folge (JavaScript):

Leider gibt es mit dieser Implementierung ein Problem. Der Speicherverbrauch dieser Funktion wächst bei großen n stark an. Schuld ist, dass für jeden Aufruf von fib(n)…read more

0

jQuery data-* Attribute auslesen

Posted by in JavaScript

Da arbeitet man schon so lange mit jQuery und kennt doch noch nicht alle Tricks. Diesen hier finde ich ganz interessant, deswegen bekommt er einen Blog spendiert. Die Ausgangssituation Immer wieder sind in Elementen Attribute der Form data-* zu finden. Nehmen wir als Beispiel einmal das folgende Element.

Bis jetzt habe ich das immer so ausgelesen.

Spezieller Zugriff auf data-* Es gibt aber einen besseren Weg, den jQuery speziell für diese Art von Attributen bereitstellt. Nämlich die Methode data.

Damit lassen sich data-* Attribute bequem auslesen. Und…read more

0

Async/Await – Fehlerbehandlung, Generatoren

Posted by in JavaScript

Im letzten Blog ging es um Die Grundlagen von Async/Await. Dieser Teil behandelt die Fehlerbehandlung, Probleme die es bei der Verwendung von Async/Await geben könnte und der Basisfunktionalität, ohne die es gar nicht möglich wäre Async/Await in dieser Form bereitzustellen. Fehlerbehandlung Die Fehlerbehandlung mit Async/Await kann man erheblich vereinfachen, indem try/catch-Blöcke verwendet werden. Das geht dann wie im folgenden Code

Dafür muss jedoch die Funktion getInspiration2 geändert werden. Dort muss beim Reject des Promises das error-Objekt zurückgegeben werden.

Vorteil dieser Implementierung ist, dass Fehler sinnvoll abgefangen werden können…read more

0

Karlsruher Entwicklertag 2016: Conference Day

Posted by in JavaScript, Konferenz, TypeScript

Mit etwas Verspätung wegen Urlaub schreibe ich diesmal etwas zu der Konferenz Karlsruher Entwicklertag 2016. Ich muss dazu sagen, dass ich nur am sogenannten Conference Day anwesend war und diesmal sogar zwei Vorträge halten durfte. Organisation Die Organisation war einwandfrei und lies fast keine Wüsche offen. Das ging von den Vorabinformationen per Email (Verzeihen Sie mir bitte die Emails Frau Lippert) bis zur Durchführung. Einige Session wurden professionell aufgezeichnet und die Ausstattung in den Räumlichkeiten funktionierte ohne größere Probleme. Nur das WLAN machte beim Live-Coding zicken. Wie sollte es auch…read more

0

Async/Await in JavaScript – Die Grundlagen

Posted by in JavaScript

Asynchrone Programmierung ist immer wieder eine Herausforderung. Ein häufiges Problem ist die Callback Hell Inzwischen existieren in JavaScript mehrere Möglichkeiten mit der Komplexität umzugehen. Allen voran Promises, die seit ES2015 sogar zum Sprachstandard gehören. Noch einfacher mit Async/Await Mit ES2017 kommt eine weitere Abstraktion hinzu. Sie baut auf Promises auf und der Code liest sich damit wie synchroner Code. Aber fangen wir von vorne an. Zuerst wird eine Funktion mit einem asynchronen Aufruf gebraucht. Dafür benutze ich das API von https://theysaidso.com.

Mit etwas Übung fällt der Fehler in dieser…read more

0

JavaScript-Bug ganz subtil

Posted by in JavaScript

JavaScript ist manchmal eine Sprache, die subtile Bugs produziert. Hier ist die Preisfrage: Was ist an diesem Code-Schnipsel falsch und was sind die Auswirkungen?

Keine Idee? Ich musste auch erst überlegen, da ich solche Fehler eigentlich nirgendwo erwarten würde. Das Problem ist in Zeile 6 zu finden. Die Variable json_data wird dort initialisiert. Leider nicht im lokalen Scope, sondern anscheinend im globalen Scope. Von JSON.parse() wird ein Array zurückgeliefert. Beim Debuggen hat sich dann gezeigt, dass die Array.length nicht zurückgesetzt wird. Hat es die Länge 10 bei einem Durchlauf…read more

0

TypeScript 1.6: Endlich sinnvolle Mixins?

Posted by in JavaScript, TypeScript

Wie in meinem Artikel im JavaSpektrum beschrieben, gab es bis zur Version 1.6 keine richtige Untersützung für Mixins. Mixins waren nur mit einer zusätzlichen applyMixins() möglich und auch dann hatte man jede Menge Boilerplate-Code zu schreiben, die die ganzen Vorteile zunichte gemacht haben. Intersection Types für die Rettung? Mit Intersection Types sollen jetzt laut diesem Blogpost Mixins endlich sinnvoll einsetzbar sein. Aber stimmt das? Schauen wir uns dazu einfach das Beispiel aus dem Post genauer an:

Man braucht eine Methode, um zwei Instanzen zu mixen. So ganz erklärt das…read more

0

Nodemon und PM2 mit Express 4

Posted by in JavaScript, Nodejs

Nodemon und PM2 sind sehr nützliche Tools für die Entwicklung und dann später in der Poduktion. Mit Express 3 konnte man nach der Installation einfach diese Aufrufe zum starten der Applikation benutzen:

Mit dem neuen Layout von Express 4 änderte sich das Startkommando auf npm start. Dabei wird auf die package.json und dort auf Scripts->start verwiesen, das dann ausgeführt wird. Will man Nodemon starten, dann muss man hier statt node einfach nodemon eintragen.

Startet man jetzt die Applikation sieht man in der Konsole, dass sie mit Nodemon gestartet…read more

0