Letzte Woche: Prime Factors
Zunächst bin ich den Schritten in den PowerPoint Slides gefolgt, außer dass ich eine einfache Funktion geschrieben habe, statt einer Klasse mit statischer Methode. Das ist schließlich PHP und nicht Java:
namespace PrimeFactors; function generate($n) { $primes = []; for ($candidate = 2; $n > 1; $candidate++) { for (;$n % $candidate == 0; $n /= $candidate) { $primes[] = $candidate; } } return $primes; }
Beim nächsten Mal habe ich einen objektorientierten Ansatz probiert (die Funktion einfach nur in eine Klasse verfrachten, macht sie noch nicht objektorientiert) und habe außerdem yield
genutzt, um die temporäre Variable $primes
loszuwerden.
class Number { private $n; public function __construct(int $n) { $this->n = $n; } public function primeFactors() : array { return iterator_to_array($this->primeFactorsGenerator($this->n)); } private function primeFactorsGenerator(int $n) : Generator { for ($candidate = 2; $n > 1; $candidate++) { for (; $n % $candidate == 0; $n /= $candidate) { yield $candidate; } } } }
Ich habe die Kata genutzt um endlich einmal Behat auszuprobieren. Dies sind die ersten Scenarios in meinem Feature File:
Feature: Generate In order to calculate prime factors As a user of the library I want to retrieve the prime factors for a given number Scenario: Calculate prime factors of two Given I want to find all the prime factors for "2" When I calculate the prime factors Then I should be informed that the prime factors are "2" Scenario: Calculate prime factors of three Given I want to find all the prime factors for "3" When I calculate the prime factors Then I should be informed that the prime factors are "3" Scenario: Calculate prime factors of four Given I want to find all the prime factors for "4" When I calculate the prime factors Then I should be informed that the prime factors are "2,2"
Ich fand diese Gherkins Syntax etwas umständlich für so einen Low Level Test, und es ist wahrscheinlich auch nicht dafür gemacht. Ich verstehe Behat als Framework, um Spezifikationen auf Geschäfts-Ebene zu schreiben, die in Tests übersetzt werden können.
“Primfaktoren berechnen” ist nun keine typische Endnutzer-Anforderung, aber dennoch war es eine gute, um mit Behat zu beginnen. Die PhpStorm Integration ist auch brauchbar. Ich freue mich darauf, mehr damit zu machen.
Vierte Kata: Word Wrap
Word Wrap wurde von Uncle Bob in der “Craftsman” Serie beschrieben. In Story-Form hier nachzulesen: http://thecleancoder.blogspot.de/2010/10/craftsman-62-dark-path.html
“Yeah, it’s a simple problem to understand, but it’s oddly difficult to solve. The basic premise is really simple. You write a class called Wrapper, that has a single static function named wrap that takes two arguments, a string, and a column number. The function returns the string, but with line breaks inserted at just the right places to make sure that no line is longer than the column number. You try to break lines at word boundaries.”
Meine persönlichen Ziele diese Woche
- Mich mehr mit Behat vertraut machen