HTML

Projektmenedzsment, alkalmazásfejlesztés

Online projektmenedzsment rendszerek, webes alkalmazások fejlesztése, refactoring.

Friss topikok

Linkblog

Feltételes kifejezések egyszerűsítése

2010.07.28. 22:03 develop

Alkalmazásaink működése során különböző feltételek teljesülése (nem teljesülése) esetén más és más műveletek elvégzésére lehet szükségünk.

A feltételes kifejezés legyen

  • könnyen olvasható, beszédes,
  • többször felhasználható.

Ezt a két feltételt teljesítő refactoring-folyamatot mutatja be a következő példa. 

Képzeljünk el egy feladatkezelő alkalmazást.

Ennek egy részlete: 

...
if( task::getNumberOfOpenTask() != 0 ) { ... }
...
if( task::getNumberOfOpenTask() == 0 ) { ... }
...

Az üzleti logika szerint bizonyos tevékenységeket kell elvégeznünk attól függően, hogy vannak-e nyitott feladatok.

A lekérdező statikus hívás kétszer is szerepel a kódban, vagyis kódismétléssel van dolgunk.

Emeljük ki változóba a nyitott feladatok értékét.

$numberOfTaskOpen = task::getNumberOfOpenTask();
if( $numberOfOpenTask != 0 ) { ... }
...
if( $numberOfOpenTask == 0 ) { ... }

A feladatok száma 0, vagy annál nagyobb szám - legalábbis az üzleti logika szerint most ez a mérvadó.

A könnyebb érthetőség érdekében alakítsuk át a feltételvizsgálatot.

$numberOfTaskOpen = task::getNumberOfOpenTask();
if( 0 < $numberOfOpenTask ) { ... }
...
if( !( 0 < $numberOfOpenTask ) ) { ... }

Azt látjuk, hogy a két feltétel gyakorlatilag megegyezik.

Emeljük ki a feltételvizsgálatot egy függvénybe.

function isOpenTask() {
  if( 0 < task::getNumberOfOpenTask() ) {
    return true;
  }
  return false;
}


if( isOpenTask() ) { ... }
...
if( !isOpenTask() ) { ... }

A kiemelt függvényt most már szabadon meg tudjuk hívni, viszont egyelőre csak az adott forráson belül.

Helyezzük a függvényünket egy osztályba, hogy máshol is fel tudjuk használni.

Legjobb helye - már a neve alapján is -, a task osztályban van.

class task {
  public static function isOpenTask() {
    if( 0 < self::getNumberOfOpenTask() ) {
      return true;
    }
    return false;
  }


  public static function getNumberOfOpenTask() { ... }
}

if( task::isOpenTask() ) { ... }
...
if( !task::isOpenTask() ) { ... } // nincs nyitott feladat

A fenti kódban most már csak a "nincs nyitott feladat" rész szorul továbbgondolásra.

A tagadást jelölő "!"-jel gondolkodásra késztet, nem is biztos, hogy elsőre feltűnik, így hibás értelmezésre vezethet. (Ezért is kommentezhettük be.)

Készítsünk egy tagadó formájú metódust.

class task {
  public static function isOpenTask() {
    if( 0 < self::getNumberOfOpenTask() ) {
      return true;
    }
    return false;
  }

  public static function getNumberOfOpenTask() { ... }

  public static function isNotOpenTask() {
    return !self::isOpenTask();
  }

}

if( task::isOpenTask() ) { ... }
...
if( task::isNotOpenTask() ) { ... }

A kód most már tiszta, és beszédes.

A "nincs nyitott feladat" megjegyzést is kitörölhetjük. A kód magáért beszél.

1 komment

Címkék: példa refactoring feltételes kifejezések

A bejegyzés trackback címe:

https://develop.blog.hu/api/trackback/id/tr352183522

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

süti beállítások módosítása