În Tips & Tricks

Cum să scrii un cod curat?

cod-curat

Indiferent dacă sunteţi mai experimentați sau sunteți abia la început, dacă programați într-un limbaj sau altul, anumite principii de programare trebuie respectate.

Este important ca atunci când scrieți cod să aveți în vedere trei lucruri esenţiale: pe voi, interpretatorul/compilatorul și cei care vor citi codul vostru. Să le luăm pe rând:

  • Pe voi, ca să înțelegeți și peste 3 ani ce ați vrut să faceți cu acel program.
  • Interpretatorul/compilatorul să înțeleagă și, desigur, să execute corect acel program.
  • Cei care citesc și folosesc codul scris de voi să își dea seama cât mai repede ce anume ați intenționat.

Programatorii își petrec majoritatea timpului citind cod; tocmai de aceea e important ca orice program ați crea, să fie cât mai curat și usor de folosit, extins, înţeles etc.


Cod curat vs cod neclar

Există nenumărate tehnici și feluri de a scrie un cod cât mai curat și sunt sigur că nu am cum să le trec în revistă pe toate, dar vom trece prin câteva exemple simple şi concrete, în așa fel încât să rămânem cu cele mai importante concluzii.

 

Separarea responsabilităților

Unul dintre aspectele de bază este împărțirea codului pe responsabilități. De obicei, o aplicaţie web are mai multe aspecte, cum ar fi: afișarea informației, extragerea datelor din baza de date, stilizarea paginii, validarea anumitor câmpuri etc.

Mai departe vom vedea ce înseamnă să scrii un cod neclar vs cod curat, din acest punct de vedere.


Cod neclar

Aici, problema principală este că anumite responsabilități (afișarea informației, preluarea ei din baza de date) se fac într-un singur loc și asta cauzează probleme în găsirea bug-urilor, în extinderea funcționalității și chiar în citirea codului.

index.php
<ul>
<?php
foreach ($db->query('SELECT * FROM table') as $row)
{
    echo "<li>".$row['field1']." - ".$row['field1']."</li>";
}
?>
</ul>

 

Cod curat

Având în vedere responsabilitățile pe care le putem extrage din acest cod, putem să le împărțim pe fișiere, în așa fel încât să avem un cod mai ușor de citit și, în același timp, extins.

index.php
<?php
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
include 'FooModel.php';
$fooModel = new FooModel($db);
$fooList = $fooModel->getAllFoos();
include 'foo-list.php';
FooModel.php
<?php
class FooModel
{
   protected $db;
    public function __construct(PDO $db)
    {
        $this->db = $db;
    }
    public function getAllFoos()
    {
        return $this->db->query('SELECT * FROM table');
    }
}
Foo-list.php
<?php foreach ($fooList as $row): ?>
    <?=$row['field1']?> - <?=$row['field1']?>
<?php endforeach ?>

Acoladele și indentările sunt importante

Aceste două aspecte sunt deseori ignorate pentru că unii developeri le consideră neimportante. Dar aceasta idee este greșită. De multe ori, dacă indentările și acoladele sunt folosite și aranjate corect este mult mai uşor să citiți firul de execuție al unui fișier.


Cod neclar

Deși se poate spune ca acest cod merge și așa, e destul de dificil de înțeles; mai ales când sunt sute sau mii de linii de cod scrise în acest fel.

<?php
$start="1";
$end="5";
if($start<$end)
  for($i=$start;$i<=$end;$i++)
  if($i==3){echo "oh, no!";}
  else{
    echo "everything is alright!";
}


Cod curat

Chiar dacă ocupăm un loc mai extins prin adăugarea acoladelor, câștigăm ordine și coerență în codul respectiv.

<?php
$start = "1";
$end = "5";
if ($start < $end)
{
  for($i = $start; $i <= $end; $i++)
  {
    if ($i == 3)
    {
      echo "oh, no!";
    }
    else
    {
     echo "everything is alright!";
    }
  }
}


Nume inteligente și comentarii utile

Una dintre cele mai bune metode de a scrie un cod curat este aceea de a gândi bine numele variabilelor și funcțiilor. De asemenea, dacă aceste elemente sunt numite inteligent, de multe ori comentariile nici nu mai sunt necesare; dar totuși, acestea sunt importante deoarece prin ele se poate genera documentație pe cod.


Cod neclar

În momentul în care tastăm anumite nume care nu descriu bine rolul funcțiilor sau a variabilelor, e mai dificil de înţeles cum trebuie folosite, precum și ce ar trebui să facă.

<?php
function rm_item($arr, $d)
{
  $pos = array_search($d, $arr);
  if ($pos !== false)  
  {
    unset ($arr[$pos]);  
  }
  return $arr;
}
$arr = [
  "Saturday",
  "Sunday",
"Monday"
];
$d = "Monday";
$arr = rm_item($arr, $d);
var_dump($arr);


Cod curat

Folosind nume care descriu mai bine ceea ce intenționați, dar şi comentarii bune, codul este mai curat și mai uşor de citit.

<?php
/**
 * Removes a specific day from a list of days.
 *
 * @param array  $days
 * @param string $dayToBeRemoved
 *
 * @return array
 */
function removeDay($days, $dayToBeRemoved)
{
  $dayIndex = array_search($dayToBeRemoved, $days);
  if ($dayIndex !== false)  
  {
    unset($days[$dayIndex]); 

 }
  return $days;
}
$days = [
  "Saturday",
  "Sunday",
  "Monday"
];
$dayToBeRemoved = "Monday";
$days = removeDay($days, $dayToBeRemoved);
var_dump($days);

Probabil că trecând puţin prin câteva exemple, v-ați dat seama de beneficiile aduse de scrierea unui cod curat. Îmi dau seama că acest proces necesită mai mult efort, dar toate aceste practici vă vor ajuta de-a lungul anilor, să economisiţi o mare parte din timpul vostru.

Vă încurajez să puneți în aplicare cât mai multe dintre aceste principii. Fiecare pas în acest sens vă va îndrepta, cu siguranţă, spre a fi un programator mai bun. Spor la codat!