dedlfix: Integer in Javascript aufteilen

Beitrag lesen

Tach!

Zusammen mit der Regel, dass auch Angaben wie #fa6 erlaubt sind und wie #ffaa66 behandelt werden ergibt sich:

... eine unnötige Dopplung. Erstmal die Eingabe normalisieren, dann verarbeiten. Das gute alte EVA-Prinzip (Eingabe-Verarbeitung-Ausgabe). Wenn das erste Zeichen ein # ist, schneidet man es raus. Der Fall mit den 3 Zeichen war eigentlich nicht vorgesehen, aber gut. Das ist ein zweiter Test, bei dem vorab die Eingabe normalisiert werden kann, dann hat man nur noch eine Parse-Routine statt zwei.

if (s.length == 3) {
  s = s.split('').map(function(c) { return c + c; }).join('');
}

oder kürzer in modernem Javascript:

if (s.length == 3) {
  s = s.split('').map(c => c + c).join('');
}

Anzumerken wäre noch, dass bei komplett kaputter Eingabe, wie zu viel oder zu wenig oder ganz falschen Zeichen, ein RegExp-Test eleganter aussieht. Aber es stört auch nicht, den kaputten String an substr()+parseInt() weiterzugeben, denn das fängt die isNaN()-Prüfung auf.

Und noch eine Kleinigkeit:

function() {
  if ( ... )  {
    var red = ...;
  } else {
    var red = ...;
  }
}

var ist nicht let, was nur innerhalb der nächstäußeren Klammern gültig wäre. Eine einmal mit var deklarierte Variable wird schon beim Parsen erkannt und nicht erst zur Laufzeit. Das heißt, auch wenn die Verarbeitung in den else-Zweig geht, ist die Wirkung von var vorhanden, und es wird keine globale Variable angelegt. Das zweite var stört nicht weiter, wird aber bei der Code-Analyse als überflüssig angemeckert. Besser ist es in einem solchen Fall, ein

var red, green, blue;

vor dem if zu notieren. Oder in modernem Javascript let zu nehmen, denn red, green und blue sind hier Hilfsvariablen, die nur innerhalb der if/else-Klammern gelten. Das let muss dann aber logischerweise in beiden Zweigen notiert werden.

dedlfix.