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. PAVADINIMAI
O gal geriau ?
if (cell[STATUS_VALUE] == FLAGGED)
{
flaggedCells.Add(cell);
}
=>
if (cell.IsFlagged)
{
flaggedCells.Add(cell);
}
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. 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. 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. 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. METODAI
public Money CalculatePay(Employee e)
{
switch (e.Type)
{
case EmployeeType.Hourly:
return CalculateHourlyPay(e);
break;
case EmployeeType.Salaried:
return CalculateSalariedPay(e);
break;
...
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. 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. 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. 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