O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
ŠVARUS KODAS #1

REGIMANTAS SNIEŠKA
2014 02 06
PAVADINIMAI
public List<int[]> GetThem()
{
List<int[]> list1 = new List<int[]>();
foreach (int[] x in theList)
{
if (x[0] ...
PAVADINIMAI
Geras kodas:
public List<int[]> GetFlaggedCells()
{
List<int[]> flaggedCells = new List<int[]>();
foreach (int...
PAVADINIMAI
O gal geriau ?

if (cell[STATUS_VALUE] == FLAGGED)
{
flaggedCells.Add(cell);
}
=>
if (cell.IsFlagged)
{
flagge...
PAVADINIMAI
Naudokite aiškiai suprantamus pavadinimus – pavadinimai su
skaičiais neduoda jokios informacijos
public static...
PAVADINIMAI
o Venkite “triukšmo“, kuris nieko nepasako:
• jokių Info, Data, artikelių the, a
• ObjectList -> Objects
• Nam...
PAVADINIMAI
Klasės pavadinimas turi būti daiktavardis, pvz. Customer, Address
Metodai turi būti veiksmažodžiai, pvz. Delet...
METODAI
o Turi būti trumpi, geriausia iki ~20 eilučių
o Geriau ilgesnis ir informatyvus pavadinimas, negu trumpesnis ir
ne...
METODAI
public Money CalculatePay(Employee e)
{
switch (e.Type)
{
case EmployeeType.Hourly:
return CalculateHourlyPay(e);
...
METODAI
public abstract class Employee
{
public abstract Money CalculatePay();
}
public class EmployeeFactory
{
public Emp...
METODAI
o Atsiradus naujai funkcijai, pagal objekto tipą, nereikia daryti
daugiau switch
o Visa logika susijusi su tipu, l...
METODAI
o Pavadinimai – nusakantys metodo esmę, paskirtį, pabandykite
keletą kartų pakeisti, gal kažkuris tiks labiau
o Pe...
METODAI
Nenaudokite output argumentų – jie sunkiai suprantami
Vietoj bool perdavimo geriau du atskiri metodai
Daryti tik t...
Próximos SlideShares
Carregando em…5
×

Clean code part 1

291 visualizações

Publicada em

Publicada em: Tecnologia, Negócios
  • Seja o primeiro a comentar

Clean code part 1

  1. 1. ŠVARUS KODAS #1 REGIMANTAS SNIEŠKA 2014 02 06
  2. 2. PAVADINIMAI public List<int[]> GetThem() { List<int[]> list1 = new List<int[]>(); foreach (int[] x in theList) { if (x[0] == 4) list1.Add(x); } return list1; }
  3. 3. PAVADINIMAI Geras kodas: public List<int[]> GetFlaggedCells() { List<int[]> flaggedCells = new List<int[]>(); foreach (int[] cell in gameBoard) { if (cell[STATUS_VALUE] == FLAGGED) { flaggedCells.Add(cell); } } return flaggedCells; }
  4. 4. PAVADINIMAI O gal geriau ? if (cell[STATUS_VALUE] == FLAGGED) { flaggedCells.Add(cell); } => if (cell.IsFlagged) { flaggedCells.Add(cell); }
  5. 5. PAVADINIMAI Naudokite aiškiai suprantamus pavadinimus – pavadinimai su skaičiais neduoda jokios informacijos public static void CopyChars(char[] a1, char[] a2) { for (int i = 0; i < a1.Length; i++) { a2[i] = a1[i]; } } a1 = source a2 = destination
  6. 6. PAVADINIMAI o Venkite “triukšmo“, kuris nieko nepasako: • jokių Info, Data, artikelių the, a • ObjectList -> Objects • NameString -> Name • CustomerObject -> Customer o Naudokite ištariamus pavadinimus, ne trumpinius o Pavadinimai turi būti lengvai ieškomi o Vienos raidės pavadinimai tik lokalūs ir mažam scope
  7. 7. PAVADINIMAI Klasės pavadinimas turi būti daiktavardis, pvz. Customer, Address Metodai turi būti veiksmažodžiai, pvz. DeletePage, Save Accessor‘iai, predicate‘ai turėtų būti su Get/Set/Is prefiksais Išlaikykite nuoseklumą pavadinimuose – pvz. jei yra fetch, get, retrieve žodžiai, kurie realiai reiškia tą patį, vertėtų pasirinkti vieną jų o Naudokite techninius žodžius, nusakančius objekto paskirtį – AccountVisitor, JobQueue o o o o
  8. 8. METODAI o Turi būti trumpi, geriausia iki ~20 eilučių o Geriau ilgesnis ir informatyvus pavadinimas, negu trumpesnis ir neaiškus o Kodas viduje if/else/while iškeltas į atskirą metodą, su esmę nusakančiu pavadinimu o Atlikti vieną ir TIK vieną funkciją o Jei įmanoma, vengti switch, keisti polimorfizmu
  9. 9. METODAI public Money CalculatePay(Employee e) { switch (e.Type) { case EmployeeType.Hourly: return CalculateHourlyPay(e); break; case EmployeeType.Salaried: return CalculateSalariedPay(e); break; ...
  10. 10. METODAI public abstract class Employee { public abstract Money CalculatePay(); } public class EmployeeFactory { public Employee GetEmployee(EmployeeType type) { switch (type) { case EmployeeType.Hourly: return new HourlyEmployee(); ... public class HourlyEmployee : Employee { ... }
  11. 11. METODAI o Atsiradus naujai funkcijai, pagal objekto tipą, nereikia daryti daugiau switch o Visa logika susijusi su tipu, laikoma vienoje vietoje o Atsiradus naujam tipui, kuriame naują klasę, bet nekeičiame senų (Open for extension, closed for modification)
  12. 12. METODAI o Pavadinimai – nusakantys metodo esmę, paskirtį, pabandykite keletą kartų pakeisti, gal kažkuris tiks labiau o Perduodamų argumentų kiekiai • Idealiu atveju 0 • 1 – gerai • 2 – patenkinamai • 3 – prastai • 4+ - reikia pergalvoti sprendimą (gal naudoti container objektą?) o Daug argumentų daro metodą sunkiai suvokiamu o Mažai argumentų labai palengvina testavimą
  13. 13. METODAI Nenaudokite output argumentų – jie sunkiai suprantami Vietoj bool perdavimo geriau du atskiri metodai Daryti tik tai, kas žadama, jokių paslėptų funkcijų metodo viduje Vykdyti arba atsakyti į klausimą, bet ne abu iš karto Vietoj custom error code, geriau mesti Exception, taip atsiskiria „happy path“ o Try/catch viduje geriausia iškart kviesti metodus, kurių viduje yra logika (SRP) o Venkite besikartojančio kodo (!) o o o o o

×