Orlok: Array.prototype.includes

Beitrag lesen

Hallo Felix

Finde ich absolut legitim. Auch wenn es auf den ersten Blick wie "fishing for compliments" erscheinen mag, so bietet jede dieser Meldungen eine Gelegenheit für (hoffentlich konstruktive) Kritik. Und das soll ja hier und nicht auf den Diskussionsseiten im Wiki geschehen.

Sehe ich auch so. Ich denke, hiervon profitieren beide Seiten: Ich selbst, weil ich entweder positives Feedback bekomme das mich motiviert, oder weil jemand wie du hier konstruktive Kritik äußert, die mich bessere Artikel schreiben lässt. Und die Leser, die einerseits mitbekommen was sich im Wiki so tut und die andererseits die Gelegenheit bekommen, dazu Stellung zu nehmen.

Wenn wir schon bei Kritik sind: Ist es für unbedarftere Leser wünschenswert, anschaulichere Beispiele zu erstellen?

Klar ist es das! :-D

Aber es ist gar nicht so leicht, sich für jede Begebenheit ein schönes, anschauliches Beispiel auszudenken. Ich habe in den letzten Wochen diverse Artikel geschrieben und dabei weit über hundert verschiedene Codebeispiele eingebaut, wie ein kurzes Überfliegen der besagten Artikel gerade ergeben hat. Wenn ich mir mit den Beispielen noch mehr Zeit genommen hätte, dann gäbe es jetzt sicher den ein oder anderen Artikel weniger. Und damit die ein oder andere inhaltliche Lücke im Wiki mehr. ;-)

Aber es ist nicht nur eine Frage des Zeitaufwands, sondern es ist auch immer zu berücksichtigen, welchen Zweck ein bestimmtes Beispiel erfüllen soll. Sprich, wenn es das Ziel ist irgendeine Syntax zu veranschaulichen, dann ist es meiner Meinung nach eher kontraproduktiv, wenn das Ganze in einem zu opulenten Kontext präsentiert wird. Da ist es glaube ich besser, sich auf das Wesentliche zu beschränken.

Denn darüber hinaus ist schließlich auch immer zu berücksichtigen, dass man ja nie weiß, welches Vorwissen der Leser oder die Leserin besitzt. Schreibt man also ein ausführlicheres, vielleicht auch praxisnäheres Beispiel, dann lässt sich das Risiko kaum vermeiden, Sprachmittel zu verwenden, mit denen der oder die Lesende womöglich nicht vertraut ist. Also muss man dann im Begleittext noch weitere Einzelheiten des Beispiels erklären oder zumindest Erklärungen verlinken, was aber alles wieder vom eigentlichen Thema ablenkt. Und natürlich auch wieder Zeit kostet, die an anderer Stelle vielleicht besser investiert wäre.

Prinzipiell gebe ich dir also auf jeden Fall recht, dass anschauliche und ausdrucksstarke Beispiele eine gute Sache sind und wir Autoren uns darum bemühen sollten solche Beispiele zu erstellen, aber ich mag eben auch zu bedenken geben, dass die Lücken immer noch groß und die Autoren wenige sind, und dass diese Autoren auch nicht unendlich viel Zeit investieren können um die Lücken zu schließen, weshalb es vielleicht manchmal auch einfach eine aus der Not heraus geborene Entscheidung pro Inhalt und contra Form ist, wenn man nur zeigt, was wann und unter welchen Umständen ausgegeben wird.

Gerade diejenigen, die unser Wiki zum Lernen und weniger zum Nachschlagen brauchen, schauen sicher seltener in die Browserkonsole. Gerade für includes böte es sich an zu prüfen, ob ein Affe Bananen und Seetang frisst:

const Affenfutter = [
    "Banane", "Samen"
];

alert(
    "Affen fressen "
    + (Affenfutter.includes("Banane") ? "gerne" : "keine")
    + " Bananen."
);
alert(
    "Affen fressen "
    + (Affenfutter.includes("Seetang") ? "gerne" : "keinen")
    + " Seetang."
);

Bevor ich näher auf diesen Punkt eingehe – bitte verzeih’ mir – kann ich nicht umhin, etwas aus einem deiner früheren Postings zu zitieren. :-D

Aus meiner Sicht ist window.alert grundsätzlich zu bekämpfen.

Mein Credo: Anfängern ist alert als giftig und strengstens zu vermeiden abzuempfehlen.

Ich weiß, ich weiß, das war gemein. ;-)

Aber eigentlich finde ich, dass du damit recht hattest, denn gerade Anfänger, die das Wiki zum Lernen benutzen, sollten so früh wie möglich lernen, dass es eine Konsole gibt und wie und wofür man sie verwenden kann. Einen Artikel der sich damit befasst gibt es ja. Dieser sollte am besten in jedem Artikel der in den Beispielen die Konsole verwendet auch verlinkt werden. Dass ich das bislang nicht konsequent getan habe ist ein Fehler.

Darüber hinaus möchte ich jedoch zu bedenken geben, dass ich in meinen Beispielen durchaus versuche, auf die üblichen Verdächtigen foo, bar und baz zu verzichten. ;-)

const jekyll = { };
 
const hyde = Object(jekyll);
 
console.log(jekyll === hyde); // true

Zugegeben, die meisten meiner Beispiele sind nur mäßig originell, wie dieses Beispiel aus meinem Artikel zum Konstruktor Object. Aber wie ich schon sagte, ist die Frage auch immer wieviel Zeit man sich dafür nehmen kann und will, um sich ein besseres Beispiel auszudenken. Ich habe über manchen Beispielen wirklich lange gebrütet und dann ein schlechtes Gewissen bekommen, weil ich das Gefühl hatte, ich hätte die Zeit auch produktiver Nutzen und vielleicht die eine oder andere wirklich gravierende inhaltliche Lücke im Wiki schließen können.

Davon abgesehen, habe ich mir angewöhnt die Codebeispiele grundsätzlich in Englisch zu verfassen, dafür aber im Fließtext nach Möglichkeit keine englischen sondern deutsche Begriffe zu verwenden, wobei ich dann oft noch die englische Übersetzung in Klammern dahinter setze. Ich meine, natürlich ist es kein Fehler, in Codebeispielen deutsche Worte für Bezeichner zu verwenden, aber ich finde es kann nicht schaden, der englischen Sprache hier zumindest in diesem Kontext etwas Raum zu geben, zumal jeder, der sich vom totalen Anfänger in diesem Bereich weiterentwickeln möchte, früher oder später nicht umhinkommt, auch Texte und Code in dieser Sprache zu lesen. Aber diese Entscheidung, Code grundsätzlich in Englisch zu verfassen, möchte ich natürlich niemandem aufzwingen.

Und um noch etwas zu der von dir verwendeten Technik zu sagen: Strinkkonkatenation wie in deinem Beispiel ist sowas von ECMAScript 5! ;-)

const Affenfutter = ['Banane', 'Samen'];

console.info(`Affen fressen ${
  Affenfutter.includes('Banane') ? 'gerne' : 'keine'
} Bananen.`);

console.info(`Affen fressen ${
  Affenfutter.includes('Seetang') ? 'gerne' : 'keinen'
} Seetang.`);

Genauso wie der Syntaxhighlighter hier im Forum, oder wird das bei irgendwem richtig angezeigt? :-D

Naja, aber selbst ohne Template Strings, wäre eine Variante mit Array.prototype.join doch eher zu empfehlen. Aber das ist im Moment ohnehin ein großes Problem, da in ECMAScript 6 die Antworten auf viele Fragen nach der best practice anders ausfallen, die entsprechende Syntax in dieser Übergangsphase aber oft noch nicht zufriedenstellend unterstützt wird.

Und um nochmal auf einen Satz von dir zurückzukommen:

Gerade diejenigen, die unser Wiki zum Lernen und weniger zum Nachschlagen brauchen

Ich denke, gerade die Teile des Wikis in denen ich mich bislang eingebracht habe betreffen ja eher die technische Dokumentation und weniger Tutorials für Anfänger. Ich denke, da ist es dann vielleicht auch eher verzeihlich, wenn die Beispiele ein wenig sachlicher und abstrakter sind, als es in einem Anfängertutorial angebracht wäre.

Da an anderer Stelle ausdrücklich davor gewarnt wird, in Sprachelemente verändernd einzugreifen, böte sich hier ein kurzer Absatz an, warum dieses Polyfill absichtlich doch dieses tut, und warum dieses Vorgehen nicht nur sinnvoll sondern wichtig ist.

Da hast du allerdings recht. – Werde sehen, dass ich die Info hinzufüge.

Jedenfalls, wie dem auch sei, möchte ich mich für deine konstruktive Kritik bedanken! :-)

Viele Grüße,

Orlok