OOP po lopate - this - dis

Sila OOP by sa dala charakterizovať aj týmto magickým slovíčkom this, tento článok sa nevolá len tak this - dis. Ako budete mať radi túto premennú, tak ju niekedy budete mať radi ešte menej a to už ani nehovorím o tom, že niektoré jazyky si povedali, že this je too mainstream. Poďme sa pozrieť teda na to, čo tento this znamená.

Ale poďme to urobiť zábavnou formou, predstavme si, že máme v hlave niekoho kto nás riadi.

Ale ako sa to vzťahuje k OOP?

Veľmi jednoducho predstavme si seba človeka a teraz niekde vnútri v nás táto postavička detekuje, že máme málo energie. Čo teda urobí? Príde a nastaví v nás hodnotu hlad = pravda. No a my ideme hladať jedlo a končí to takto:

V reči OOP by to vyzeralo takto: Existuje trieda Človek, tá má metódu ži a atribút hlad a aj energiu. V metóde ži, pozeráme stav, či máme dosť energie a keď jej máme málo, tak nastavíme hlad na pravdu, aby sme sa šli napapať. Ako by sme niečo také implementovali? Už sme sa zoznámili s atribútmi a metódami. Tak to teda skúsme.

<?php
class Human
{
    public $hunger = false;
    public $energy = 5;
    public $life = 10;

    public function live()
    {
      while($this->life > 0) {

        if ($this->hunger) {
          $this->energy = 5;
          $this->hunger = false;
        } else if ($this->energy == 0) {
          $this->hunger = true;
        }

        echo "Mam: {$this->energy} energie" . PHP_EOL;

        $this->energy--;
        $this->life--;
      }
    }
}

$me = new Human();
$me->live();
class Human:

  def __init__(self):
    self.hunger = False
    self.life = 10
    self.energy = 5

  def live(self):
     while(self.life > 0):

        if (self.hunger):
          self.energy = 5;
          self.hunger = False;
        elif self.energy == 0:
          self.hunger = True;

        print(f"Mam: {self.energy} energie")

        self.energy = self.energy - 1
        self.life = self.life - 1

dano = Human()
dano.live()
class Human {
    constructor() {
      this.hunger = false;
      this.energy = 5;
      this.life = 10;
    }

    live() {
      while(this.life > 0) {

        if (this.hunger) {
          this.energy = 5;
          this.hunger = false;
        } else if (this.energy == 0) {
          this.hunger = true;
        }

        console.log(`Mam: ${this.energy} energie`);

        this.energy--;
        this.life--;
      }
    }
}

let dano = new Human();
dano.live();
// Human.java
public class Human {

    private boolean hunger = false;
    private int energy = 5;
    private int life = 10;

    public void live()
    {
        while(this.life > 0) {

            if (this.hunger) {
                this.energy = 5;
                this.hunger = false;
            } else if (this.energy == 0) {
                this.hunger = true;
            }

            System.out.println("Mam: " + this.energy +" energie");

            this.energy--;
            this.life--;
        }
    }
}

// Main.java
public class Main {
    public static void main(String[] args) {
        Human h = new Human();
        h.live();
    }
}