Tracks
/
JavaScript
JavaScript
/
Übungen
/
Glückszahlen
Glückszahlen

Glückszahlen

Lernübung

Einführung

In JavaScript können Werte von unterschiedlichem Typ sein. Den Typ einer Variable kannst du durch eine explizite Typkonvertierung ändern. Außerdem führt JavaScript eine Typumwandlung (implizite Typkonvertierung) durch, wenn der Kontext es erfordert.

Typkonvertierung

Anders als viele andere Sprachen hat JavaScript kein Konstrukt, um in einen (anderen) Typ umzuwandeln. Stattdessen kannst du einige eingebaute Hilfsfunktionen verwenden. Vor allem Boolean, Number und String kannst du als Funktionen verwenden, um einen Wert in den jeweiligen Typ umzuwandeln.

In einen booleschen Wert umwandeln (Truthy-/Falsy-Werte)

Mit Boolean(value) kannst du jeden Wert in einen booleschen Wert umwandeln. Es gibt eine feste Menge von Werten, die sogenannten falsy Werte, die zu false werden. Vor allem false, 0, der leere String, null, undefined und NaN sind falsy.

Für alle anderen Werte gibt Boolean true zurück. Diese Werte heißen truthy.

Boolean(-1);
// => true

Boolean(0);
// => false

Boolean(' ');
// => true

Boolean('');
// => false

Beachte, dass wegen der beschriebenen Regeln '0', 'false', [] und {} in JavaScript truthy sind.

In eine Zahl umwandeln

Mit Number(value) kannst du einen Wert in eine Zahl umwandeln. Leerzeichen am Anfang und am Ende eines Strings werden ignoriert, und ein leerer String wird zu 0. Wenn du versuchst, einen nicht-primitiven Wert oder einen String umzuwandeln, der keine Zahl darstellt, ist das Ergebnis NaN (Not-A-Number).

Number('  -12.34  ');
// => -12.34

Number('1,2');
// => NaN

Number('');
// => 0

Number({ num: 123 });
// => NaN

In einen String umwandeln

Mit String(value) kannst du einen Wert in einen String umwandeln. Bei primitiven Werten ist das Ergebnis so, wie du es erwartest.

String(12.34);
// => '12.34'

String(false);
// => 'false'

String(null);
// => 'null'

String(undefined);
// => 'undefined'

Bei Arrays wendet die String-Funktion die String-Konvertierung auf jedes Element an und verbindet die Ergebnisse mit einem Komma. Du kannst auch selbst die join-Methode verwenden, zum Beispiel um das Trennzeichen anzupassen. Beachte, dass in diesen Fällen null und undefined in einen leeren String umgewandelt werden.

String([42, null, true, 'abc']);
// => '42,,true,abc'

Bei Objekten gibt String standardmäßig einen wenig hilfreichen Text zurück.

String({ key: 'value' });
// => '[object Object]'

Typumwandlung

In bestimmten Kontexten wandelt JavaScript einen Wert automatisch in einen anderen Datentyp um, bevor es eine Anweisung auswertet. Diese implizite Konvertierung heißt Typumwandlung.

Boolescher Kontext

Wenn ein nicht-boolescher Wert in einem booleschen Kontext verwendet wird, wendet JavaScript dieselben Regeln an wie die Boolean-Funktion, um den Wert implizit umzuwandeln.

Eine Umwandlung in einen booleschen Wert findet häufig statt bei

  • der Bedingung einer if-Anweisung
  • dem ersten Operanden des ternären Operators ?
  • dem Operanden des logischen NICHT-Operators !
  • den Operanden der logischen Operatoren UND && und ODER || (das Ergebnis des Ausdrucks ist einer der Operanden, nicht unbedingt ein boolescher Wert)
const num = 0;
if (num) {
  // this block is NOT executed because 0 is falsy
}

String-Kontext

Wenn der Additionsoperator + auf primitive Werte angewendet wird und ein Operand ein String ist, wird der andere ebenfalls in einen String umgewandelt. Die Konvertierungslogik ist dieselbe wie bei der String-Funktion. Anschließend werden die beiden Strings verkettet.

let name;
'hello ' + name;
// => 'hello undefined'

Numerischer Kontext

Viele Operatoren wandeln ihre Operanden (falls nötig) nach der oben erklärten Logik der Number-Funktion in Zahlen um.

  • Arithmetische Operatoren: + (wenn kein String beteiligt ist), -, *, /, %, **
  • Unäre Plus- und Negationsoperatoren: +, -
  • Vergleichsoperatoren (für Operanden, die keine Strings sind): >, >=, <, <=
  • Bitweise Operatoren: |, &, ^, ~

Weitere Details zu diesen Operatoren findest du in der MDN-Liste der Operatoren.

Um Fehler zu vermeiden, solltest du Number immer explizit aufrufen, bevor du diese Operatoren anwendest.

Anleitung

Dein Freund Kojo ist ein großer Zahlenfan. Er hat eine kleine Website namens „fun-with-numbers“. Kojo ist nicht besonders gut im Programmieren, deshalb hat er dich um Hilfe gebeten.

Du wirst zwei Hilfsfunktionen für neue Zahlenspiele auf Kojos Website bauen und eine dritte, um eine Eingabe des Nutzers zu prüfen.

1. Berechne die Summe der Zahlen auf dem Spielautomaten

Eines der Spiele auf Kojos Website sieht aus wie ein Spielautomat, der zwei Gruppen von Walzen mit Ziffern darauf zeigt. Jede Zifferngruppe stellt eine Zahl dar. Für die Spielmechanik muss Kojo die Summe dieser beiden Zahlen kennen.

Schreibe eine Funktion twoSum, die zwei Arrays als Parameter entgegennimmt. Jedes Array besteht aus einer oder mehreren Zahlen zwischen 0 und 9. Die Funktion soll jedes Array als eine Zahl interpretieren und die Summe dieser beiden Zahlen zurückgeben.

twoSum([1, 2, 3], [0, 7]);
//=> 130

// [1, 2, 3] represents 123 and [0, 7] represents 7.
// 123 + 7 = 130

2. Prüfe, ob eine Zahl ein Palindrom ist

Ein weiteres Spiel auf der Website ist ein kleines Quiz namens „Lucky Numbers“. Ein Nutzer kann eine Zahl eingeben und sieht dann, ob die Zahl zu einer geheimen Folge oder einem Muster gehört. Die Folge oder das Muster der „lucky numbers“ ändert sich jeden Monat, und jeder Nutzer hat nur eine begrenzte Anzahl von Versuchen, um sie zu erraten.

Die Glückszahlen dieses Monats sollen Zahlen sein, die Palindrome sind. Palindromzahlen bleiben gleich, wenn man ihre Ziffern umdreht.

Implementiere die neue Funktion luckyNumber, die eine Zahl als Parameter entgegennimmt. Die Funktion soll true zurückgeben, wenn die Zahl ein Palindrom ist, andernfalls false. Die eingegebene Zahl ist immer eine positive Ganzzahl.

luckyNumber(1441);
//=>  true

luckyNumber(123);
//=> false

3. Erzeuge eine Fehlermeldung für ungültige Nutzereingaben

An verschiedenen Stellen auf der Website gibt es Eingabefelder, in die Nutzer Zahlen eingeben und dann auf einen Button klicken können, um eine Aktion auszulösen. Kojo möchte die Nutzererfahrung seiner Website verbessern. Er möchte eine Fehlermeldung anzeigen, wenn der Nutzer auf den Button klickt, das Feld aber einen ungültigen Eingabewert enthält.

Hier sind noch ein paar Informationen dazu, wie der Wert eines Eingabefelds bereitgestellt wird.

  • Wenn der Nutzer etwas in ein Feld tippt, ist der zugehörige Wert immer ein String, auch wenn er nur Zahlen eingegeben hat.
  • Wenn der Nutzer etwas eingibt und es dann wieder löscht, ist die Variable ein leerer String.
  • Bevor der Nutzer überhaupt mit dem Tippen begonnen hat, kann die Variable undefined oder null sein.

Schreibe eine Funktion errorMessage, die die Nutzereingabe als Parameter entgegennimmt. Wenn der Nutzer keine Eingabe gemacht hat, soll errorMessage 'Required field' zurückgeben. Wenn die Eingabe keine Zahl ungleich 0 darstellt (gemäß den Umwandlungsregeln von JavaScript), soll 'Must be a number besides 0' zurückgegeben werden. In allen anderen Fällen kannst du davon ausgehen, dass die Eingabe gültig ist; der Rückgabewert sollte ein leerer String sein.

errorMessage('123');
// => ''

errorMessage('');
// => 'Required field'

errorMessage('abc');
// => 'Must be a number besides 0'
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
JavaScript Exercism

Bereit, mit Glückszahlen zu starten?

Melde dich bei Exercism an, um JavaScript mit 37 Konzepte159 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.