Aktywne Wpisy
Ytarka +33
Lubię, gdy dobre rzeczy równie dobrze wyglądają, a Marshall wie, jak to się robi.
JBL wysiada. I jest brzydki. Nawet z tym nie handlujcie.
#chwalesie #takaprawda
JBL wysiada. I jest brzydki. Nawet z tym nie handlujcie.
#chwalesie #takaprawda
Sprzęty, które okazały się strzałem w 10. Takie perełki, poprawiające życie, spędzany czas. Dla mnie? Pierwsze z brzegu to czytnik e-booków oraz dobre słuchawki bezprzewodowe. Mój must have, który wymieniam co kilka lat na topowe modele. U Was?
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
@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.
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
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 funkcjicheckCredentialsAreGiven
,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
Komentarz usunięty przez autora