Wpis z mikrobloga

Witajcie Mirasy. Przerabiam właśnie książkę "Czysty Kod" R.c.M. I nie wiem czy autor za mocno nie popłynął bo według niego nawet funkcja:

private void printGuessStatistics(char candidate, int count) {
String number;
String verb;
String pluralModifier;
if (count == 0) {
number = "no";
verb = "are";
pluralModifier = "s";
} else if (count == 1) {
number = "1";
verb = "is";
pluralModifier = "";
} else {
number = Integer.toString(count);
verb = "are";
pluralModifier = "s";
}
String guessMessage = String.format(
"There %s %s %s%s", verb, number, candidate, pluralModifier);
print(guessMessage);
}

str.50 Listing 2.1.

Wymaga rozbicia na jeszcze mniejsze np takie z samym przypisywaniem do zmiennych. Pytam bo przynajmniej mi się wydaję, że to już chyba przesada:

private void thereIsOneLetter()
{
number = "1";
verb = "is";
pluralModifier = "";
}

Całość według autora:

public class GuessStatisticsMessage
{
private String number;
private String verb;
private String pluralModifier;
public String make(char candidate, int count)
{
createPluralDependentMessageParts(count);
return String.format(
"There %s %s %s%s",
verb, number, candidate, pluralModifier );
}
private void createPluralDependentMessageParts(int count)
{
if (count == 0)
{
thereAreNoLetters();
}
else if (count == 1)
{
thereIsOneLetter();
}
else
{
thereAreManyLetters(count);
}
}
private void thereAreManyLetters(int count)
{
number = Integer.toString(count);
verb = "are";
pluralModifier = "s";
}
private void thereIsOneLetter() {
number = "1";
verb = "is";
pluralModifier = "";
}
private void thereAreNoLetters() {
number = "no";
verb = "are";
pluralModifier = "s";
}
}

#programowanie #cleancode
  • 8
funkcja ma robić jedną i tylko jedną rzecz (single responsibility), ułatwia to pisanie testów


@erajwa: Akurat w tym przypadku podfunkcje są prywatne – czyli ich nie testujesz. Testujesz funkcję główną, która w efekcie robi wszystko co podfunkcje.

Więc w żaden sposób nie ułatwia to testowania.
@Vanguard1990: standardowo wygląda to tak:

1. Piszesz długie spaghetti metody, bo nie wiesz, że to złe i piszesz tylko dla siebie, więc who cares.
3. Wpadasz (ew. z czyjąś pomocą) na pomysł wydzielania funkcji na logiczne fragmenty, nawet, jeśli są to funkcje wywoływane tylko jeden raz.
5. Popadasz ze starej skrajności w nową, jarąc się pomysłami jak "max 5 linii" (https://robots.thoughtbot.com/sandi-metz-rules-for-developers),
7. Uber czytelnie
9. Miesiąc później twój mózg zalicza
@sasik520: @Vanguard1990: Generalnie idea Wujka Boba jest taka: rozbijamy funkcje wg dwóch poziomów: jedne opisują procesy, drugie opisują operacje.

Funkcje „wyższego poziomu” (opisujące procesy) mówią „co oczekujemy, że się stanie” – np funkcja authenticate nie będzie robiła nic poza odpaleniem funkcji checkCredentialsAreGiven, checkUserExists, checkPasswordIsOk, storeAccessToken.

I te pomniejsze funkcje „niższego poziomu” (opisujące operacje) mają już szczegóły techniczne tego jak zrealizować to co chcemy „abstrakcyjnie” osiągnąć.

Mając