際際滷

際際滷Share a Scribd company logo
亊从仆亳亶 从仂亟
      亟亳仂: 仂亰仂弍仆亳从亳

      仍亠从舒仆亟 舒于仍亳舒从, 2010
      pavlyshak@gmail.com
丼仂仄 束磻仆亳亶 从仂亟損?
 Maintainability
 >50%
   仄仆亳
   舒亞从亳
   亟亳仄从舒
 亠舒亳于仆 仄亠仂亟亳 仂亰仂弍从亳
Maintainability ==    $

Maintainability == 亊从仆亳亶 从仂亟

     亊从仆亳亶 从仂亟 == $$
弌舒仆亟舒仆 仗亳舒仆仆 亟仂 仂亰仂弍仆亳从舒
 乂仂 仂弍亳 亳亠仄舒, 从仂仍亳 于亟弍于舒 丱?
 亊从 从仂仆从亠仆仂 仗舒ム 仆从仂仆舒仍仆 Y?
 于亟从亳 亟舒ム
  仂仗 Z?
 弌从仍从亳 舒 亰舒亶仄亠
  亠舒仍亰于舒亳 丱?
亠 于亟仗仂于亟?

  仗亠亳从舒
                亊从仂  于舒 于仂仆舒  ;)
  从仂亟
                仂亟  亰舒于亢亟亳
                Only the Code Tells the Truth
 亠舒仍仆仂仄 亢亳
 亠磻仆亳亶 从仂亟 仗仂于仍仆ム 仂亰仂弍从
 乂仂弍 亟仂亳仄舒亳 亞舒从舒, 仂亰仂弍仆亳从亳
  于亳亟从仂 仗亳 仆亠磻仆亳亶 从仂亟



     舒舒亟仂从!
亊从仆亳亶 从仂亟


 亊从 仗亳舒亳 磻仆亳亶 从仂亟?
 亠 仗亳 仗仂亞舒仆亳亶 从仂亟
仄亠仆舒
仄亳仍亠仆 仄亠仆a

public void Copy(char[] a1, char[] a2)
{
  for (int i = 0; i < a1.Length; i++)
  {
    a2[i] = a1[i];
  }
}
仄亳仍亠仆 仄亠仆a

public void Copy(char[] source, char[] destination)
{
  for (int i = 0; i < source.Length; i++)
  {
    destination[i] = source[i];
  }
}
仄 于亟仂弍舒亢舒 仆舒仄亳  
 d, tot, res, srv, c, cc, c1, c2  BAD!
 createdDate, totalCount, result,
  storageService, characters  GOOD!

 仂于亞亠 亰仄仂于仆亠 仄 从舒亠 从仂仂从仂亞仂
  仆亠亰仂亰仄仍仂亞仂
 仄仂于仆亠 仄 从舒亠 亳亠仍仆仂 从仂仆舒仆亳
仂仆舒仆亳
...
if (!resource.Exists)
{
    result = 404;
}
else if (resource.WasMoved)
{
    result = 301;
}
else if (user == null)
{
    result = 401;
}
...
仂仆舒仆亳
...
if (!resource.Exists)
{
    result = HttpStatusCode.NotFound;
}
else if (resource.WasMoved)
{
    result = HttpStatusCode.MovedPermanently;
}
else if (user == null)
{
    result = HttpStatusCode.Unauthorized;
}
...
仂仂从亠 仄  从仂仂从舒 于亳亟亳仄

int[] elements = 
for (int i = 0; i < elements.Count(); i++)
{
  elements[i] = elements[i] * 2;
}
仂仍亟仂于仆 仄亠仆舒
 Get, Fetch, Retrieve, Obtain, Acquire
Feed feed = FeedService.ObtainSyndicationFeed();
if (feed.IsValid)
{
   Storage feedStorage = GetFileStorage(path);
   List<Post> posts = feed.RetrievePosts();
   feedStorage.Save(posts);
}

 亳弍亠 仂亟仆亠  仗仂仍亟仂于仆仂 亟仂亳仄亶亠
  亶仂亞仂
舒亟仍亳从仂于
 nameString, customersArray
 sName, iCount, arrCustomers

string nameString = "Kenny";
string[] girlsArray = FindAllAttractiveGirls();

FileStream ouputFile = File.Open("c:autoexec.bat");
Url urlToBashOrg = new Url("http://bash.org.ru");
仄亠仆舒 亰 仗亠亟仄亠仆仂 仂弍仍舒
List<Person> list =
   country.GetAllUnemployedPeople();
if (list.Count > 1000 * 1000)
{
   presidentFacebookPage.CurrentStatus =
       "Still working...";
}
仄亠仆舒 亰 仗亠亟仄亠仆仂 仂弍仍舒
List<Person> unemployedPeople =
   country.GetAllUnemployedPeople();
if (unemployedPeople.Count > 1000 * 1000)
{
   presidentFacebookPage.CurrentStatus =
     "Still working...";
}
仄亠仆舒 亰 仗亠亟仄亠仆仂 仂弍仍舒
if (pageIdsByUserId.Get(user.Id)
   .ContainsKey(page.Id)
   ) {...}

Map<int, Map<int, int>> pageIdsByUserId;


if (user.HasAccessTo(page))
{...}
丐亳仗仂于 仄亠仆舒
 仄亠仆舒 亰仄仆仆亳
  customer, currentPosition, isCompleted, result
 仄亠仆舒 从仍舒于  仄亠仆仆亳从亳
  Customer, UrlParser, Page, SortAlgorithm
 仄亠仆舒 仄亠仂亟于  亟仍仂于舒
  GetCustomers(), CreateDirectory(),
  OpenSocket(), Save(), Close()
舒 从仂亟 弍亟 亳舒亳
个仆从
仂亰仄 仄舒 亰仆舒亠仆仆
 舒从亳仄舒仍仆亳亶: 20 磲从于
 仗亳仄舒仍仆亳亶: <= 5 磲从于
 于亠仆 于亟仗于: <= 2
仂仂从舒 仆从
if (user.IsAuthenticated)
{
       SendProcessingCompletedEmail();
}
else
{
       RedirectUserToLoginForm(user);
}

弌仗亳 亟仂从仄亠仆于舒仆仆 从仂亟
于亠仆 舒弍舒从
 个仆从 于亳从仂仆 仍亳亠 仂亟仆 仂仗亠舒
 亠亠亟亳仆 仆从  仂亟亳仆 于亠仆 舒弍舒从
于亠仆 舒弍舒从
public void SynchronizeNewTasks()
{
  string database = "DBGLOBAL";
  if (user.HasAttribute("LOCAL"))
  {
     database = service.GetDatabaseBaseName() +
        "_LOCAL";
  }
  if (user.Tasks.ContainsNewTasks())
  {
     SaveNewTasks(database, user.Tasks.GetNewTasks());
  }
}
于亠仆 舒弍舒从
public void SynchronizeNewTasks()
{
  if (user.Tasks.ContainsNewTasks())
  {
     string database = GetDatabaseForUser(
        user);
     SaveNewTasks(database,
        user.Tasks.GetNewTasks());
  }
}
亞仄亠仆亳 仆从亶
   亠亰 舒亞仄亠仆于, Save()  仆舒亶从舒 :)
   亟亳仆 舒亞仄亠仆, Send(address)  亠亢 仆仂亞仂
   于舒, Copy(source, destination)  
   丐亳  于亢亠 仆亠 亟亢亠
   仍亠  亰仆舒仆仂 仗仂亞ム 亳舒弍亠仍仆
    :(
仍亠于 舒亞仄亠仆亳
char[] source = ...
char[] destination = ...
Copy(source, destination, true);


                           :(
仍亠于 舒亞仄亠仆亳
List<Task> tasks = ...;
Storage storage = ...;
SaveNewTasks(tasks,
   storage,
   true,
   false,
   false,
   true,                   :(
   true);
亳亟仆 舒亞仄亠仆亳
byte[] fileContent = ...
byte[] compressedContent;
Compress(fileContent, out compressedContent);
仂弍仆 亠亠从亳
public bool IsPasswordValid(string userName, string password)
{
  User user = Database.FindUserByName(userName);
  string encryptedPassword = Encryptor.Encrypt(password);
  bool result = user.EncryptedPassword == encryptedPassword;
  if (result)
  {
     Session.Initialize();
  }
  return result;
}
Shared state
 仆仄亰亶亠 仗仍仆 亟舒仆
Exceptions 亰舒仄 从仂亟于 仗仂仄亳仍仂从
if (FindUserByName(userName, out user) == STATUS_OK)
{
   if (Encrypt(password, out encryptedPassword) == STATUS_OK)
   {
       bool result = user.EncryptedPassword == encryptedPassword;
       if (result)
       {
          if (Session.Initialize() == STATUS_OK)
             return true;
          else
             LogError(...);
       }
     ...
弍仂弍仍磺亠 仗仂仄亳仍从亳



                                  http://stackoverflow.com
...
// Catching exceptions is for communists
...
                                     Wrong!
舒仆亳仆 仄仂于亳
 舒仂于亶亠 亞舒仆亳仆 仄仂于亳
 丐亠亶亠 亞舒仆亳仆 仄仂于亳

public void Sort(int[] array)
{
  ...
}
亠仗仂弍仆亳亶 从仂亟
 个仆从, 磻 仆亠 仆亟亠 仆亠 于亳从仂亳仂于ム 
  于亳亟舒仍磺亠 !
 仂亟, 磻亳亶 仆从仂仍亳 仆亠 于亳从仍亳从舒 
  于亳亟舒仍磺亠 亶仂亞仂!
 仂  于 亳亠仄 从仂仆仂仍 于亠亶
亟仂仂于亳亶 亞仍亰亟
 仂亟 仆亠 仗仂于亳仆亠仆 于亳从仍亳从舒亳 亰亟亳于于舒仆仆
 仂于亠亟仆从舒 仄舒 弍亳 仂亠于亳亟仆舒
 束亳 仗舒ム亠 亰 亳亳仄 从仂亟仂仄, 磻仂 从仂亢仆舒
  仆从 仂弍亳 仗亳弍仍亳亰仆仂 亠, 仂 于亳
  仂从亠損
舒 从仂亟 弍亟 亳舒亳
仂仄亠仆舒
http://stackoverflow.com




...
/////////////////////////////////////// this is a well commented line
...
仂 从仂仄亠仆舒
 舒亟舒于舒亶亠 仗亠亠于舒亞 从仂亟
 仂仄亠仆亶亠 亠, 仂 仆亠 仄仂亢仆舒 于亳舒亰亳亳 于
  从仂亟
 仂弍仍亠仄舒 从仂仄亠仆舒于  仗仂于亟
 亠仂仆 从仂仄亠仆舒  亞亠 于亟仆仂
  从仂仄亠仆舒于
 仂仄亠仆舒 仆亠 从仂仄仗亠仆ム 仗仂亞舒仆仂亞仂 从仂亟
// check if we should redirect to another URL
if (server.HasResponse &&
    server.HttpResponseCode == 301)

vs.

bool isRedirectNeeded = server.HasResponse &&
    server.HttpResponseCode == 301;
if (isRedirectNeeded)


vs.

if (server.IsRedirectNeeded())
亊从 从仂仄亠仆于舒亳
 仂仄亠仆亶亠 仗弍仍仆亳亶 API
 仂仄亠仆亶亠 于仆仆亶 API 仍从亳 磻仂 于仆
  从仍舒亟仆亳亶
 亠 于亳从仂亳仂于亶亠 从仂仄亠仆舒 舒仄, 亟亠 仄仂亢仆舒
  于亳从仂亳舒亳 仆从 舒弍仂 亰仄仆仆
 亳亟舒仍磺亠 亰舒从仂仄亠仆仂于舒仆亳亶 从仂亟
仍舒亳
Single responsibility
 仍舒亳 仗仂于亳仆仆 弍亳 从仂仄仗舒从仆
 仂仄仗舒从仆 于亳亰仆舒舒 从仍从
  于亟仗仂于亟舒仍仆仂亠亶 (responsibilities)
 仍舒 仗仂于亳仆亠仆 仄舒亳 仂亟仆 于亟仗仂于亟舒仍仆
  (single responsibility)
 仍舒 仗仂于亳仆亠仆 仄舒亳 仂亟仆 仗亳亳仆 亟仍 亰仄仆亳
 舒亞舒仂 从仂仄仗舒从仆亳 从仍舒于
if-statements
    丼亳仄 弍仍亠 if-statements, 亳仄 弍仍亠
     仗仂亠仆亶仆亳 仗仂仄亳仍仂从         if (_serviceType == "analysis")
                                                        return 20;
public int GetHours()                            }
  {                                              else //i.e. LARGE
     if (_numberOfManuals <= SMALL)              {
     {                                              if (_serviceType == "writing")
         if (_serviceType == "writing")                 return (SMALL * 30) + (20 *
             return 30 * _numberOfManuals; (MEDIUM - SMALL)) + (10 *
         if (_serviceType == "analysis")   _numberOfManuals - MEDIUM);
             return 10;                             if (_serviceType == "analysis")
     }                                                  return 30;
     else if (_numberOfManuals <= MEDIUM)        }
     {                                           return 0; //Just a default fallback
         if (_serviceType == "writing")    for this contrived example
             return (SMALL * 30) + (20 *      }
_numberOfManuals - SMALL);
舒 从仂亟 弍亟 亳舒亳
乂亠 从仍从舒 亟仄仂从
仂弍仂舒
 仂弍仂舒 仂亰仂弍仆亳从舒 仆亠 亰舒从仆 仗仍
  仂亞仂, 从仂仍亳 仗仂亞舒仄舒 亰舒仗舒ミ火夷姉
 仍 仂亞仂 仗仂弍仆仂 仗仂从舒亳亳 从 
  亳仂 从仂亟
舒于亳仍仂
 仂亳仄亶亠 束仗舒于亳仍舒 弍仂亶从舒舒損

 从仂亢亠仆 舒亰 从仂仍亳 于亳 仗舒ム亠 亰 从仂亟仂仄,
 亰舒仍亳舒亶亠 亶仂亞仂 仂亳 亳亳仄, 仆亢 于仆 弍于
 亟仂 仂亞仂
丶亠 仗仂仂
 亠亠于舒亢仆仂 仆亠于舒亢从仂 仗仂从舒亳亳 从仂亟
 亳亠 仂亳 仗亠亠仄亠仆于舒, 于于亠亟亠仆仆 仆仂于亳
  仆从亶, 仂亳 亠从亳亰舒
 丶亠 仆亠 rocket science
 舒于 磻仂 亠 仆亠 仗仂仂, ...
 ... 亠 于亠 仂亟仆仂 从舒于仂
 丼仂仄 弍 亳仄 仆亠 亰舒亶仆亳?
丐亠亳
 丼亳从舒 从仂亟 仆仂 仗仂于磶舒仆舒 亰 亠舒仄亳
 丐亠亳  于仗亠于仆亠仆
仂亟  亠 亠 仆亠 于亠
   丕仗舒于仍仆仆
   舒从亠亳仆亞
   仂仄舒仆亟舒
   仂仄仆从舒
   舒亠仆仆
   舒仄仂于仆亳从
仂亠仂仆舒仍亰仄
 亟亠 仗仂亠仂仆舒仍仂仄
 仂亠仂仆舒仍亳 仆亠 仗亳 仆亠磻仆亳亶 从仂亟
 亊从仂 仗仂亠仂仆舒仍 仆舒仗亳舒于 仆亠磻仆亳亶 从仂亟,
  于仆 亶仂亞仂 仗仂亳亳
仆亳亞亳
 Code Complete,
 Steve McConnell



 Clean Code,
 Robert C. Martin



 Code Craft,
 Pete Goodliffe

More Related Content

Viewers also liked (20)

Laptops na Sala de Aula. E agora?Laptops na Sala de Aula. E agora?
Laptops na Sala de Aula. E agora?
Richard Reinaldo
Apresentac箕ao gn fe_2012ok-1Apresentac箕ao gn fe_2012ok-1
Apresentac箕ao gn fe_2012ok-1
AgenciaGH
TALLER DE ERGONOMIA LABORALTALLER DE ERGONOMIA LABORAL
TALLER DE ERGONOMIA LABORAL
Roxana Ruiz
BullyingBullying
Bullying
Biblioteca do Agrupamento D. Sancho I de Pont辿vel
Santoro et al 13 cbgeSantoro et al 13 cbge
Santoro et al 13 cbge
Maria Jos辿 Brollo
Ejemplo spectacle Ejemplo spectacle
Ejemplo spectacle
Elizabeth Granados
Viola巽達o Dom辿stica Viola巽達o Dom辿stica
Viola巽達o Dom辿stica
BeSomeoneWhocares
SRJ_Supplement_P2
SRJ_Supplement_P2SRJ_Supplement_P2
SRJ_Supplement_P2
Shajahan VA
Artigo_Santoro et alArtigo_Santoro et al
Artigo_Santoro et al
Maria Jos辿 Brollo
C坦mo hacer una br炭jula caseraC坦mo hacer una br炭jula casera
C坦mo hacer una br炭jula casera
Manuel Dzul
Elianetarefawriter
ElianetarefawriterElianetarefawriter
Elianetarefawriter
professoraeliane
PP BloggerPP Blogger
PP Blogger
Maria Jose Pastor
ReddeblogsReddeblogs
Reddeblogs
baelito52
Geotecnologias e desastres naturaisGeotecnologias e desastres naturais
Geotecnologias e desastres naturais
Maria Jos辿 Brollo
Sintonizados na r叩dio pe達oSintonizados na r叩dio pe達o
Sintonizados na r叩dio pe達o
Katia Perez - Comunica巽達o Corporativa, Comunica巽達o Empresarial
Alex 13Alex 13
Alex 13
Franklin2001
Art 6 ThomazArt 6 Thomaz
Art 6 Thomaz
Maria Jos辿 Brollo
Aprimorando a percep巽達oAprimorando a percep巽達o
Aprimorando a percep巽達o
Helton Montechesi
Jardim do Ser - Apresenta巽達o InstitucionalJardim do Ser - Apresenta巽達o Institucional
Jardim do Ser - Apresenta巽達o Institucional
Jardim do Ser
Precentacion maria josePrecentacion maria jose
Precentacion maria jose
maariiajosee
Laptops na Sala de Aula. E agora?Laptops na Sala de Aula. E agora?
Laptops na Sala de Aula. E agora?
Richard Reinaldo
Apresentac箕ao gn fe_2012ok-1Apresentac箕ao gn fe_2012ok-1
Apresentac箕ao gn fe_2012ok-1
AgenciaGH
TALLER DE ERGONOMIA LABORALTALLER DE ERGONOMIA LABORAL
TALLER DE ERGONOMIA LABORAL
Roxana Ruiz
Santoro et al 13 cbgeSantoro et al 13 cbge
Santoro et al 13 cbge
Maria Jos辿 Brollo
Ejemplo spectacle Ejemplo spectacle
Ejemplo spectacle
Elizabeth Granados
Viola巽達o Dom辿stica Viola巽達o Dom辿stica
Viola巽達o Dom辿stica
BeSomeoneWhocares
SRJ_Supplement_P2
SRJ_Supplement_P2SRJ_Supplement_P2
SRJ_Supplement_P2
Shajahan VA
Artigo_Santoro et alArtigo_Santoro et al
Artigo_Santoro et al
Maria Jos辿 Brollo
C坦mo hacer una br炭jula caseraC坦mo hacer una br炭jula casera
C坦mo hacer una br炭jula casera
Manuel Dzul
PP BloggerPP Blogger
PP Blogger
Maria Jose Pastor
ReddeblogsReddeblogs
Reddeblogs
baelito52
Geotecnologias e desastres naturaisGeotecnologias e desastres naturais
Geotecnologias e desastres naturais
Maria Jos辿 Brollo
Alex 13Alex 13
Alex 13
Franklin2001
Art 6 ThomazArt 6 Thomaz
Art 6 Thomaz
Maria Jos辿 Brollo
Aprimorando a percep巽達oAprimorando a percep巽達o
Aprimorando a percep巽達o
Helton Montechesi
Jardim do Ser - Apresenta巽達o InstitucionalJardim do Ser - Apresenta巽達o Institucional
Jardim do Ser - Apresenta巽達o Institucional
Jardim do Ser
Precentacion maria josePrecentacion maria jose
Precentacion maria jose
maariiajosee

Similar to Clean code (UA) (20)

Play Mongodb
Play MongodbPlay Mongodb
Play Mongodb
Infinity
仆仂于亳 舒仍亞仂亳仄亰舒 舒 仗仂亞舒仄于舒仆仆. 亠从 1
仆仂于亳 舒仍亞仂亳仄亰舒 舒 仗仂亞舒仄于舒仆仆. 亠从 1仆仂于亳 舒仍亞仂亳仄亰舒 舒 仗仂亞舒仄于舒仆仆. 亠从 1
仆仂于亳 舒仍亞仂亳仄亰舒 舒 仗仂亞舒仄于舒仆仆. 亠从 1
Dmitry Chabanenko
01 c# basics
01 c# basics01 c# basics
01 c# basics
eleksdev
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
Fwdays
仂亟仍 Python
仂亟仍 Python仂亟仍 Python
仂亟仍 Python
从舒亠亳仆舒 舒亟舒
Lec10 11 ado-net
Lec10 11 ado-netLec10 11 ado-net
Lec10 11 ado-net
cit-cit
丐亠于舒仆仆 仗亳 仂亰仂弍 仗仂亞舒仄仆仂亞仂 亰舒弍亠亰仗亠亠仆仆. Unit Tests.
丐亠于舒仆仆 仗亳 仂亰仂弍 仗仂亞舒仄仆仂亞仂 亰舒弍亠亰仗亠亠仆仆. Unit Tests.丐亠于舒仆仆 仗亳 仂亰仂弍 仗仂亞舒仄仆仂亞仂 亰舒弍亠亰仗亠亠仆仆. Unit Tests.
丐亠于舒仆仆 仗亳 仂亰仂弍 仗仂亞舒仄仆仂亞仂 亰舒弍亠亰仗亠亠仆仆. Unit Tests.
Elantix
亶仆仄仂 .NET 亳
亶仆仄仂 .NET 亳亶仆仄仂 .NET 亳
亶仆仄仂 .NET 亳
Serhiy Kalinets
仆仂于亳 仗仂亞舒仄于舒仆仆 .舒从舒仍 .1
仆仂于亳 仗仂亞舒仄于舒仆仆 .舒从舒仍 .1仆仂于亳 仗仂亞舒仄于舒仆仆 .舒从舒仍 .1
仆仂于亳 仗仂亞舒仄于舒仆仆 .舒从舒仍 .1
rznz
舒从舒仍
舒从舒仍舒从舒仍
舒从舒仍
Irina Tabanets
弌仍舒亶亟亳 仗亠亰亠仆舒 亟仍 仍亠从 个仆从 亟仍 仂弍仂亳 亰 弍舒亰舒仄亳 亟舒仆亳
弌仍舒亶亟亳 仗亠亰亠仆舒 亟仍 仍亠从 个仆从  亟仍 仂弍仂亳 亰 弍舒亰舒仄亳 亟舒仆亳弌仍舒亶亟亳 仗亠亰亠仆舒 亟仍 仍亠从 个仆从  亟仍 仂弍仂亳 亰 弍舒亰舒仄亳 亟舒仆亳
弌仍舒亶亟亳 仗亠亰亠仆舒 亟仍 仍亠从 个仆从 亟仍 仂弍仂亳 亰 弍舒亰舒仄亳 亟舒仆亳
ssuser4921e9
Phpunit 仄仂亟仍仆亠 亠于舒仆仆
Phpunit 仄仂亟仍仆亠 亠于舒仆仆Phpunit 仄仂亟仍仆亠 亠于舒仆仆
Phpunit 仄仂亟仍仆亠 亠于舒仆仆
Vladimir Maslechkin
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
Igor Bronovskyy
JavaScript. Lectures. part 1. basis
JavaScript. Lectures. part 1. basisJavaScript. Lectures. part 1. basis
JavaScript. Lectures. part 1. basis
仍亠亞 仍亞从亳亶
07 Containers
07 Containers07 Containers
07 Containers
olegapster
Programuvanna na movi_pascal
Programuvanna na movi_pascalProgramuvanna na movi_pascal
Programuvanna na movi_pascal
Ann Eres
Play Mongodb
Play MongodbPlay Mongodb
Play Mongodb
Infinity
仆仂于亳 舒仍亞仂亳仄亰舒 舒 仗仂亞舒仄于舒仆仆. 亠从 1
仆仂于亳 舒仍亞仂亳仄亰舒 舒 仗仂亞舒仄于舒仆仆. 亠从 1仆仂于亳 舒仍亞仂亳仄亰舒 舒 仗仂亞舒仄于舒仆仆. 亠从 1
仆仂于亳 舒仍亞仂亳仄亰舒 舒 仗仂亞舒仄于舒仆仆. 亠从 1
Dmitry Chabanenko
01 c# basics
01 c# basics01 c# basics
01 c# basics
eleksdev
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
Fwdays
Lec10 11 ado-net
Lec10 11 ado-netLec10 11 ado-net
Lec10 11 ado-net
cit-cit
丐亠于舒仆仆 仗亳 仂亰仂弍 仗仂亞舒仄仆仂亞仂 亰舒弍亠亰仗亠亠仆仆. Unit Tests.
丐亠于舒仆仆 仗亳 仂亰仂弍 仗仂亞舒仄仆仂亞仂 亰舒弍亠亰仗亠亠仆仆. Unit Tests.丐亠于舒仆仆 仗亳 仂亰仂弍 仗仂亞舒仄仆仂亞仂 亰舒弍亠亰仗亠亠仆仆. Unit Tests.
丐亠于舒仆仆 仗亳 仂亰仂弍 仗仂亞舒仄仆仂亞仂 亰舒弍亠亰仗亠亠仆仆. Unit Tests.
Elantix
亶仆仄仂 .NET 亳
亶仆仄仂 .NET 亳亶仆仄仂 .NET 亳
亶仆仄仂 .NET 亳
Serhiy Kalinets
仆仂于亳 仗仂亞舒仄于舒仆仆 .舒从舒仍 .1
仆仂于亳 仗仂亞舒仄于舒仆仆 .舒从舒仍 .1仆仂于亳 仗仂亞舒仄于舒仆仆 .舒从舒仍 .1
仆仂于亳 仗仂亞舒仄于舒仆仆 .舒从舒仍 .1
rznz
弌仍舒亶亟亳 仗亠亰亠仆舒 亟仍 仍亠从 个仆从 亟仍 仂弍仂亳 亰 弍舒亰舒仄亳 亟舒仆亳
弌仍舒亶亟亳 仗亠亰亠仆舒 亟仍 仍亠从 个仆从  亟仍 仂弍仂亳 亰 弍舒亰舒仄亳 亟舒仆亳弌仍舒亶亟亳 仗亠亰亠仆舒 亟仍 仍亠从 个仆从  亟仍 仂弍仂亳 亰 弍舒亰舒仄亳 亟舒仆亳
弌仍舒亶亟亳 仗亠亰亠仆舒 亟仍 仍亠从 个仆从 亟仍 仂弍仂亳 亰 弍舒亰舒仄亳 亟舒仆亳
ssuser4921e9
Phpunit 仄仂亟仍仆亠 亠于舒仆仆
Phpunit 仄仂亟仍仆亠 亠于舒仆仆Phpunit 仄仂亟仍仆亠 亠于舒仆仆
Phpunit 仄仂亟仍仆亠 亠于舒仆仆
Vladimir Maslechkin
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
Igor Bronovskyy
07 Containers
07 Containers07 Containers
07 Containers
olegapster
Programuvanna na movi_pascal
Programuvanna na movi_pascalProgramuvanna na movi_pascal
Programuvanna na movi_pascal
Ann Eres
Ad

Clean code (UA)

  • 1. 亊从仆亳亶 从仂亟 亟亳仂: 仂亰仂弍仆亳从亳 仍亠从舒仆亟 舒于仍亳舒从, 2010 pavlyshak@gmail.com
  • 2. 丼仂仄 束磻仆亳亶 从仂亟損? Maintainability >50% 仄仆亳 舒亞从亳 亟亳仄从舒 亠舒亳于仆 仄亠仂亟亳 仂亰仂弍从亳
  • 3. Maintainability == $ Maintainability == 亊从仆亳亶 从仂亟 亊从仆亳亶 从仂亟 == $$
  • 4. 弌舒仆亟舒仆 仗亳舒仆仆 亟仂 仂亰仂弍仆亳从舒 乂仂 仂弍亳 亳亠仄舒, 从仂仍亳 于亟弍于舒 丱? 亊从 从仂仆从亠仆仂 仗舒ム 仆从仂仆舒仍仆 Y? 于亟从亳 亟舒ム 仂仗 Z? 弌从仍从亳 舒 亰舒亶仄亠 亠舒仍亰于舒亳 丱?
  • 5. 亠 于亟仗仂于亟? 仗亠亳从舒 亊从仂 于舒 于仂仆舒 ;) 从仂亟 仂亟 亰舒于亢亟亳 Only the Code Tells the Truth
  • 6. 亠舒仍仆仂仄 亢亳 亠磻仆亳亶 从仂亟 仗仂于仍仆ム 仂亰仂弍从 乂仂弍 亟仂亳仄舒亳 亞舒从舒, 仂亰仂弍仆亳从亳 于亳亟从仂 仗亳 仆亠磻仆亳亶 从仂亟 舒舒亟仂从!
  • 7. 亊从仆亳亶 从仂亟 亊从 仗亳舒亳 磻仆亳亶 从仂亟? 亠 仗亳 仗仂亞舒仆亳亶 从仂亟
  • 9. 仄亳仍亠仆 仄亠仆a public void Copy(char[] a1, char[] a2) { for (int i = 0; i < a1.Length; i++) { a2[i] = a1[i]; } }
  • 10. 仄亳仍亠仆 仄亠仆a public void Copy(char[] source, char[] destination) { for (int i = 0; i < source.Length; i++) { destination[i] = source[i]; } }
  • 11. 仄 于亟仂弍舒亢舒 仆舒仄亳 d, tot, res, srv, c, cc, c1, c2 BAD! createdDate, totalCount, result, storageService, characters GOOD! 仂于亞亠 亰仄仂于仆亠 仄 从舒亠 从仂仂从仂亞仂 仆亠亰仂亰仄仍仂亞仂 仄仂于仆亠 仄 从舒亠 亳亠仍仆仂 从仂仆舒仆亳
  • 12. 仂仆舒仆亳 ... if (!resource.Exists) { result = 404; } else if (resource.WasMoved) { result = 301; } else if (user == null) { result = 401; } ...
  • 13. 仂仆舒仆亳 ... if (!resource.Exists) { result = HttpStatusCode.NotFound; } else if (resource.WasMoved) { result = HttpStatusCode.MovedPermanently; } else if (user == null) { result = HttpStatusCode.Unauthorized; } ...
  • 14. 仂仂从亠 仄 从仂仂从舒 于亳亟亳仄 int[] elements = for (int i = 0; i < elements.Count(); i++) { elements[i] = elements[i] * 2; }
  • 15. 仂仍亟仂于仆 仄亠仆舒 Get, Fetch, Retrieve, Obtain, Acquire Feed feed = FeedService.ObtainSyndicationFeed(); if (feed.IsValid) { Storage feedStorage = GetFileStorage(path); List<Post> posts = feed.RetrievePosts(); feedStorage.Save(posts); } 亳弍亠 仂亟仆亠 仗仂仍亟仂于仆仂 亟仂亳仄亶亠 亶仂亞仂
  • 16. 舒亟仍亳从仂于 nameString, customersArray sName, iCount, arrCustomers string nameString = "Kenny"; string[] girlsArray = FindAllAttractiveGirls(); FileStream ouputFile = File.Open("c:autoexec.bat"); Url urlToBashOrg = new Url("http://bash.org.ru");
  • 17. 仄亠仆舒 亰 仗亠亟仄亠仆仂 仂弍仍舒 List<Person> list = country.GetAllUnemployedPeople(); if (list.Count > 1000 * 1000) { presidentFacebookPage.CurrentStatus = "Still working..."; }
  • 18. 仄亠仆舒 亰 仗亠亟仄亠仆仂 仂弍仍舒 List<Person> unemployedPeople = country.GetAllUnemployedPeople(); if (unemployedPeople.Count > 1000 * 1000) { presidentFacebookPage.CurrentStatus = "Still working..."; }
  • 19. 仄亠仆舒 亰 仗亠亟仄亠仆仂 仂弍仍舒 if (pageIdsByUserId.Get(user.Id) .ContainsKey(page.Id) ) {...} Map<int, Map<int, int>> pageIdsByUserId; if (user.HasAccessTo(page)) {...}
  • 20. 丐亳仗仂于 仄亠仆舒 仄亠仆舒 亰仄仆仆亳 customer, currentPosition, isCompleted, result 仄亠仆舒 从仍舒于 仄亠仆仆亳从亳 Customer, UrlParser, Page, SortAlgorithm 仄亠仆舒 仄亠仂亟于 亟仍仂于舒 GetCustomers(), CreateDirectory(), OpenSocket(), Save(), Close()
  • 21. 舒 从仂亟 弍亟 亳舒亳
  • 23. 仂亰仄 仄舒 亰仆舒亠仆仆 舒从亳仄舒仍仆亳亶: 20 磲从于 仗亳仄舒仍仆亳亶: <= 5 磲从于 于亠仆 于亟仗于: <= 2
  • 24. 仂仂从舒 仆从 if (user.IsAuthenticated) { SendProcessingCompletedEmail(); } else { RedirectUserToLoginForm(user); } 弌仗亳 亟仂从仄亠仆于舒仆仆 从仂亟
  • 25. 于亠仆 舒弍舒从 个仆从 于亳从仂仆 仍亳亠 仂亟仆 仂仗亠舒 亠亠亟亳仆 仆从 仂亟亳仆 于亠仆 舒弍舒从
  • 26. 于亠仆 舒弍舒从 public void SynchronizeNewTasks() { string database = "DBGLOBAL"; if (user.HasAttribute("LOCAL")) { database = service.GetDatabaseBaseName() + "_LOCAL"; } if (user.Tasks.ContainsNewTasks()) { SaveNewTasks(database, user.Tasks.GetNewTasks()); } }
  • 27. 于亠仆 舒弍舒从 public void SynchronizeNewTasks() { if (user.Tasks.ContainsNewTasks()) { string database = GetDatabaseForUser( user); SaveNewTasks(database, user.Tasks.GetNewTasks()); } }
  • 28. 亞仄亠仆亳 仆从亶 亠亰 舒亞仄亠仆于, Save() 仆舒亶从舒 :) 亟亳仆 舒亞仄亠仆, Send(address) 亠亢 仆仂亞仂 于舒, Copy(source, destination) 丐亳 于亢亠 仆亠 亟亢亠 仍亠 亰仆舒仆仂 仗仂亞ム 亳舒弍亠仍仆 :(
  • 29. 仍亠于 舒亞仄亠仆亳 char[] source = ... char[] destination = ... Copy(source, destination, true); :(
  • 30. 仍亠于 舒亞仄亠仆亳 List<Task> tasks = ...; Storage storage = ...; SaveNewTasks(tasks, storage, true, false, false, true, :( true);
  • 31. 亳亟仆 舒亞仄亠仆亳 byte[] fileContent = ... byte[] compressedContent; Compress(fileContent, out compressedContent);
  • 32. 仂弍仆 亠亠从亳 public bool IsPasswordValid(string userName, string password) { User user = Database.FindUserByName(userName); string encryptedPassword = Encryptor.Encrypt(password); bool result = user.EncryptedPassword == encryptedPassword; if (result) { Session.Initialize(); } return result; }
  • 33. Shared state 仆仄亰亶亠 仗仍仆 亟舒仆
  • 34. Exceptions 亰舒仄 从仂亟于 仗仂仄亳仍仂从 if (FindUserByName(userName, out user) == STATUS_OK) { if (Encrypt(password, out encryptedPassword) == STATUS_OK) { bool result = user.EncryptedPassword == encryptedPassword; if (result) { if (Session.Initialize() == STATUS_OK) return true; else LogError(...); } ...
  • 35. 弍仂弍仍磺亠 仗仂仄亳仍从亳 http://stackoverflow.com ... // Catching exceptions is for communists ... Wrong!
  • 36. 舒仆亳仆 仄仂于亳 舒仂于亶亠 亞舒仆亳仆 仄仂于亳 丐亠亶亠 亞舒仆亳仆 仄仂于亳 public void Sort(int[] array) { ... }
  • 37. 亠仗仂弍仆亳亶 从仂亟 个仆从, 磻 仆亠 仆亟亠 仆亠 于亳从仂亳仂于ム 于亳亟舒仍磺亠 ! 仂亟, 磻亳亶 仆从仂仍亳 仆亠 于亳从仍亳从舒 于亳亟舒仍磺亠 亶仂亞仂! 仂 于 亳亠仄 从仂仆仂仍 于亠亶
  • 38. 亟仂仂于亳亶 亞仍亰亟 仂亟 仆亠 仗仂于亳仆亠仆 于亳从仍亳从舒亳 亰亟亳于于舒仆仆 仂于亠亟仆从舒 仄舒 弍亳 仂亠于亳亟仆舒 束亳 仗舒ム亠 亰 亳亳仄 从仂亟仂仄, 磻仂 从仂亢仆舒 仆从 仂弍亳 仗亳弍仍亳亰仆仂 亠, 仂 于亳 仂从亠損
  • 39. 舒 从仂亟 弍亟 亳舒亳
  • 42. 仂 从仂仄亠仆舒 舒亟舒于舒亶亠 仗亠亠于舒亞 从仂亟 仂仄亠仆亶亠 亠, 仂 仆亠 仄仂亢仆舒 于亳舒亰亳亳 于 从仂亟 仂弍仍亠仄舒 从仂仄亠仆舒于 仗仂于亟 亠仂仆 从仂仄亠仆舒 亞亠 于亟仆仂 从仂仄亠仆舒于 仂仄亠仆舒 仆亠 从仂仄仗亠仆ム 仗仂亞舒仆仂亞仂 从仂亟
  • 43. // check if we should redirect to another URL if (server.HasResponse && server.HttpResponseCode == 301) vs. bool isRedirectNeeded = server.HasResponse && server.HttpResponseCode == 301; if (isRedirectNeeded) vs. if (server.IsRedirectNeeded())
  • 44. 亊从 从仂仄亠仆于舒亳 仂仄亠仆亶亠 仗弍仍仆亳亶 API 仂仄亠仆亶亠 于仆仆亶 API 仍从亳 磻仂 于仆 从仍舒亟仆亳亶 亠 于亳从仂亳仂于亶亠 从仂仄亠仆舒 舒仄, 亟亠 仄仂亢仆舒 于亳从仂亳舒亳 仆从 舒弍仂 亰仄仆仆 亳亟舒仍磺亠 亰舒从仂仄亠仆仂于舒仆亳亶 从仂亟
  • 46. Single responsibility 仍舒亳 仗仂于亳仆仆 弍亳 从仂仄仗舒从仆 仂仄仗舒从仆 于亳亰仆舒舒 从仍从 于亟仗仂于亟舒仍仆仂亠亶 (responsibilities) 仍舒 仗仂于亳仆亠仆 仄舒亳 仂亟仆 于亟仗仂于亟舒仍仆 (single responsibility) 仍舒 仗仂于亳仆亠仆 仄舒亳 仂亟仆 仗亳亳仆 亟仍 亰仄仆亳 舒亞舒仂 从仂仄仗舒从仆亳 从仍舒于
  • 47. if-statements 丼亳仄 弍仍亠 if-statements, 亳仄 弍仍亠 仗仂亠仆亶仆亳 仗仂仄亳仍仂从 if (_serviceType == "analysis") return 20; public int GetHours() } { else //i.e. LARGE if (_numberOfManuals <= SMALL) { { if (_serviceType == "writing") if (_serviceType == "writing") return (SMALL * 30) + (20 * return 30 * _numberOfManuals; (MEDIUM - SMALL)) + (10 * if (_serviceType == "analysis") _numberOfManuals - MEDIUM); return 10; if (_serviceType == "analysis") } return 30; else if (_numberOfManuals <= MEDIUM) } { return 0; //Just a default fallback if (_serviceType == "writing") for this contrived example return (SMALL * 30) + (20 * } _numberOfManuals - SMALL);
  • 48. 舒 从仂亟 弍亟 亳舒亳
  • 50. 仂弍仂舒 仂弍仂舒 仂亰仂弍仆亳从舒 仆亠 亰舒从仆 仗仍 仂亞仂, 从仂仍亳 仗仂亞舒仄舒 亰舒仗舒ミ火夷姉 仍 仂亞仂 仗仂弍仆仂 仗仂从舒亳亳 从 亳仂 从仂亟
  • 51. 舒于亳仍仂 仂亳仄亶亠 束仗舒于亳仍舒 弍仂亶从舒舒損 从仂亢亠仆 舒亰 从仂仍亳 于亳 仗舒ム亠 亰 从仂亟仂仄, 亰舒仍亳舒亶亠 亶仂亞仂 仂亳 亳亳仄, 仆亢 于仆 弍于 亟仂 仂亞仂
  • 52. 丶亠 仗仂仂 亠亠于舒亢仆仂 仆亠于舒亢从仂 仗仂从舒亳亳 从仂亟 亳亠 仂亳 仗亠亠仄亠仆于舒, 于于亠亟亠仆仆 仆仂于亳 仆从亶, 仂亳 亠从亳亰舒 丶亠 仆亠 rocket science 舒于 磻仂 亠 仆亠 仗仂仂, ... ... 亠 于亠 仂亟仆仂 从舒于仂 丼仂仄 弍 亳仄 仆亠 亰舒亶仆亳?
  • 53. 丐亠亳 丼亳从舒 从仂亟 仆仂 仗仂于磶舒仆舒 亰 亠舒仄亳 丐亠亳 于仗亠于仆亠仆
  • 54. 仂亟 亠 亠 仆亠 于亠 丕仗舒于仍仆仆 舒从亠亳仆亞 仂仄舒仆亟舒 仂仄仆从舒 舒亠仆仆 舒仄仂于仆亳从
  • 55. 仂亠仂仆舒仍亰仄 亟亠 仗仂亠仂仆舒仍仂仄 仂亠仂仆舒仍亳 仆亠 仗亳 仆亠磻仆亳亶 从仂亟 亊从仂 仗仂亠仂仆舒仍 仆舒仗亳舒于 仆亠磻仆亳亶 从仂亟, 于仆 亶仂亞仂 仗仂亳亳
  • 56. 仆亳亞亳 Code Complete, Steve McConnell Clean Code, Robert C. Martin Code Craft, Pete Goodliffe