CleanCode 3章関数
5366 ワード
関数を作るには「読みやすい」「分かりやすい」「意図がはっきりしている」
1.小さくなる
エラーコードを戻そうとすると、if文は複数のレベルのコードが重複するため、try/catchを使用するとコードがきれいになります. ですが、それさえ構造が混乱するので、ブロックをtry/catchの個別関数として抽出することが望ましいです.
1.小さくなる
1つ目のルール「小さめ!
第二条ルール「もっと小さく!」
作者は二十行も長いと言った.
if/else/hileのブロックも1行に並んでいます!
2.一つだけやる
当たり前のことですが、なかなかできません.関数は一つしかできない.
->抽象化レベルで、一つ!!(検証やレンダリングなどの単純なタスク以外)
これが難しい場合は、「意味のある名前で別の関数を抽出することができます」と、この関数は多くの仕事をしています.
3.下に移動するルール:コードを上から下へ読む
上から下まで物語のように読むのはいいコードです.
->1つの関数の後に抽象化の度合いが低い関数
4.叙述的な名前を使う // 위보다 아래가 이해하기 더 쉽다
testTableHtml
SetupTeardownIncluder
5.関数パラメータが少ないほど良い
関数の理想的な引数は、0個(アイテムなし)->1個(単項)->2個(二項)です.3項目以上は避ける
6.付随効果を生み出さない public class UserValidator {
private Cryptographer cryptographer;
public boolean checkPassword(String userName, String password) {
User user = UserGateway.findByName(userName);
if (user != User.NULL) {
String codedPhrase = user.getPhraseEncodedByPassword();
String phrase = cryptographer.decrypt(codedPharase, password);
if ("Valid Password".equlas(phrase)) {
Session.initialize();
return true;
}
}
return false;
}
}
ここで関数の副手効果はセッションです初期化()呼び出し.
明らかに、checkPassword関数はパスワードを確認する関数です.ただし、関数の呼び出し中にエラーが発生した場合、既存のセッション情報が削除される可能性があります.
7.コマンドとクエリーを分ける
関数は、ある操作を実行し、ある質問に答えるか、または両方を兼ねている必要があります.// "username" 이 "unclebob"으로 설정되어있는지 확인하는 코드인가?
// 아니면 "username" 을 "unclebob"으로 설정하는 코드인지 불확실
public boolean set(String attribute, String value);
if (set("username", "unclebob"))
8.エラーコードではなく例外を使用
当たり前のことですが、なかなかできません.関数は一つしかできない.
->抽象化レベルで、一つ!!(検証やレンダリングなどの単純なタスク以外)
これが難しい場合は、「意味のある名前で別の関数を抽出することができます」と、この関数は多くの仕事をしています.
3.下に移動するルール:コードを上から下へ読む
上から下まで物語のように読むのはいいコードです.
->1つの関数の後に抽象化の度合いが低い関数
4.叙述的な名前を使う // 위보다 아래가 이해하기 더 쉽다
testTableHtml
SetupTeardownIncluder
5.関数パラメータが少ないほど良い
関数の理想的な引数は、0個(アイテムなし)->1個(単項)->2個(二項)です.3項目以上は避ける
6.付随効果を生み出さない public class UserValidator {
private Cryptographer cryptographer;
public boolean checkPassword(String userName, String password) {
User user = UserGateway.findByName(userName);
if (user != User.NULL) {
String codedPhrase = user.getPhraseEncodedByPassword();
String phrase = cryptographer.decrypt(codedPharase, password);
if ("Valid Password".equlas(phrase)) {
Session.initialize();
return true;
}
}
return false;
}
}
ここで関数の副手効果はセッションです初期化()呼び出し.
明らかに、checkPassword関数はパスワードを確認する関数です.ただし、関数の呼び出し中にエラーが発生した場合、既存のセッション情報が削除される可能性があります.
7.コマンドとクエリーを分ける
関数は、ある操作を実行し、ある質問に答えるか、または両方を兼ねている必要があります.// "username" 이 "unclebob"으로 설정되어있는지 확인하는 코드인가?
// 아니면 "username" 을 "unclebob"으로 설정하는 코드인지 불확실
public boolean set(String attribute, String value);
if (set("username", "unclebob"))
8.エラーコードではなく例外を使用
// 위보다 아래가 이해하기 더 쉽다
testTableHtml
SetupTeardownIncluder
5.関数パラメータが少ないほど良い
関数の理想的な引数は、0個(アイテムなし)->1個(単項)->2個(二項)です.3項目以上は避ける
6.付随効果を生み出さない public class UserValidator {
private Cryptographer cryptographer;
public boolean checkPassword(String userName, String password) {
User user = UserGateway.findByName(userName);
if (user != User.NULL) {
String codedPhrase = user.getPhraseEncodedByPassword();
String phrase = cryptographer.decrypt(codedPharase, password);
if ("Valid Password".equlas(phrase)) {
Session.initialize();
return true;
}
}
return false;
}
}
ここで関数の副手効果はセッションです初期化()呼び出し.
明らかに、checkPassword関数はパスワードを確認する関数です.ただし、関数の呼び出し中にエラーが発生した場合、既存のセッション情報が削除される可能性があります.
7.コマンドとクエリーを分ける
関数は、ある操作を実行し、ある質問に答えるか、または両方を兼ねている必要があります.// "username" 이 "unclebob"으로 설정되어있는지 확인하는 코드인가?
// 아니면 "username" 을 "unclebob"으로 설정하는 코드인지 불확실
public boolean set(String attribute, String value);
if (set("username", "unclebob"))
8.エラーコードではなく例外を使用
public class UserValidator {
private Cryptographer cryptographer;
public boolean checkPassword(String userName, String password) {
User user = UserGateway.findByName(userName);
if (user != User.NULL) {
String codedPhrase = user.getPhraseEncodedByPassword();
String phrase = cryptographer.decrypt(codedPharase, password);
if ("Valid Password".equlas(phrase)) {
Session.initialize();
return true;
}
}
return false;
}
}
ここで関数の副手効果はセッションです初期化()呼び出し.明らかに、checkPassword関数はパスワードを確認する関数です.ただし、関数の呼び出し中にエラーが発生した場合、既存のセッション情報が削除される可能性があります.
7.コマンドとクエリーを分ける
関数は、ある操作を実行し、ある質問に答えるか、または両方を兼ねている必要があります.// "username" 이 "unclebob"으로 설정되어있는지 확인하는 코드인가?
// 아니면 "username" 을 "unclebob"으로 설정하는 코드인지 불확실
public boolean set(String attribute, String value);
if (set("username", "unclebob"))
8.エラーコードではなく例外を使用
// "username" 이 "unclebob"으로 설정되어있는지 확인하는 코드인가?
// 아니면 "username" 을 "unclebob"으로 설정하는 코드인지 불확실
public boolean set(String attribute, String value);
if (set("username", "unclebob"))
Reference
この問題について(CleanCode 3章関数), 我々は、より多くの情報をここで見つけました https://velog.io/@miiunii/CleanCode-3장-함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol