این اصل میگه که تابع شما باید یه کار انجام بده اما حواستون باشه که تاثیرات جانبی روی برنامه نداشته باشه که یهو به باگ بخورین و نفهمید از کجا خوردید
مثلا این کد که میاد و یوزر نیم و پسورد رو چک میکنه و اگه اوکی بود true و اگه مشکلی بود false برمیگردونه رو در نظر بگیرید
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(codedPhrase, password);
if ("Valid Password".equals(phrase)) {
Session.initialize();
return true;
}
}
return false;
}
}
این کد ظاهرا اوکیه اما دقت کنید یه قسمت Session.initialize داره که خب از اسم تابع معلوم نیس قراره سشنی درست بشه و خب کسی که کد رو میخونه نمیدونه ریسک پاک شدن سشن فعلی هست
ولی اگه نیازه که اون Session.initialize اونجا باشه بهتره که توی اسم تابع هم بیاد و خواننده کد از اسم تابع بفهمه که اونجا یه سشن initialize میشه و از side effect جلوگیری کنه
لپ کلام اینکه حواستون باشه علاوه بر اینکه تابع یه کار انجام میده در چنین شرایطی باید قسمت های مهم تابع از اسمش معلوم باشه تا تاثیرات جانبی نداشته باشه
#CleanCode
@CleverDevs - @CleverDevsGp