Letzte Woche: String Calculator
Die Kata war eine Übung in regulären Ausdrücken, auch wenn das nicht wirklich die Intention ist. Was interessanter ist, ist sich Grenzfälle zu überlegen, um die Tests fehlschlagen zu lassen. Mein Data Provider für valide Daten sah am Ende so aus, als ich die Kata das erste Mal in PHP gemacht habe:
public static function dataValidAddInput() { return [ 'empty_string_returns_zero' => ['', 0], 'single_number_returns_self' => ['1', 1], 'two_numbers_separated_by_comma' => ['1,2', 3], 'more_numbers_separated_by_comma' => ['4,2,5,6,8,10,0', 35], 'numbers_separated_by_newline' => ["1\n2", 3], 'numbers_separated_by_newline_and_comma' => ["1\n2,3", 6], 'specified_delimiter' => ["//;\n1;2", 3], 'specified_long_delimiter' => ["//DELIM\n0DELIM2DELIM3", 5], 'slash_delimiter' => ["///\n3/4", 7], 'number_0_delimiter' => ["//0\n10203", 6], 'number_9_delimiter' => ["//9\n192939", 6], ]; }
Als ich mich aber wirklich auf 15 Minuten beschränkt habe, kam ich nur bis Schritt 6.
Dem Ratschlag eines Freundes folgend, habe ich beim nächsten Mal eine vereinfachte Version implementiert, die die Eingabe lediglich auf valide Zahlen parst, ohne auf die Delimiter zu achten. Damit nehme ich in Kauf dass die “Zahl als Delimiter” Tests fehlschlagen, aber das war ein Opfer das ich bereit war zu machen. Es fühlte sich zwar wie Cheating an, aber “nicht mehr tun als notwendig” ist schließlich auch ein nützlicher Skill!
Auf einmal war die Methode, um alle Zahlen zu extrahieren sehr einfach (hier in Ruby):
def integer_array numbers numbers.scan(/-?\d+/).map(&:to_i) end
Auf diese Weise, lösten sich viele der zusätzlichen Anforderungen von selbst und ich konnte mein “Timeboxing” Ziel erfüllen.
Dritte Kata: Prime Factors
Die Kata ist hier beschrieben: http://butunclebob.com/ArticleS.UncleBob.ThePrimeFactorsKata (Power Point mit Schritt-für-Schritt-Anweisungen in Java)
Meine persönlichen Ziele diese Woche
- Endlich Behat ausprobieren