Jak czytelnie zapisać fragment kodu

0

Pisze sobie użytkowników i mam dwa bloki tego samego kodu pod sobą co mnie drażni jakiś pomysł jak się tego pozbyć ?

Założenia są takie ze
strona.pl/profil/nick/ -> prowadzi do profilu
strona.pl/profil/ -> prowadzi do naszego profilu jeśli jesteśmy zalogowani

Kod uprościłem żeby każdy wiedział o co chodzi

<?php

	public function query()
	{
		if( CzyWAdresieJestNick() )
		{
			$res = mysqli_query(...);
		}
		elseif( CzyZalogowany() )
		{
			$res = mysqli_query(...);
		}
		else
		{
			page404();
			return false;
		}
		
		if(mysqli_num_rows($res) == 0)//zle podany nick
		{
			page404();
			return false;
		}
		
		$this->container = mysqli_fetch_assoc($res);
		return true;

	}
	
?> 

jak widać powtarza mi się blok

		{
			page404();
			return false;
		}

przesadzam czy jednak wypadało by coś z tym zrobić ?

Z góry dzięki za wszelkie odpowiedzi.

1

Raczej przesadzasz. To tylko dwie linijki. Próba wymanipulowania tak, żeby tylko nie powtarzać tego zaciemniłaby czytelność kodu, a to jest najważniejsze (no chyba, że miałoby się dzięki temu wykonywać całą sekundę krócej, a kod prawdopodobnie nie musiałby być modyfikowany w przyszłości, to wtedy można by było sobie pozwolić na zmniejszenie czytelności).

PS. Ja osobiście nie strawiłbym klamry otwierającej w nowej linii, brak spacji przed nawiasem otwierającym w if i spacji pomiędzy nawiasami a warunkami w if :p
if (CzyWAdresieJestNick()) { jest dla mnie czytelniejsze :p

0

Dwie powtarzające się linie kodu nie są problemem. Gorzej jakby było więcej. Wtedy można użyć określonego edytora, który będzie chował/rozwijał dane linijki kodu (podobnie jak Eclipse SDK w Javie).

1

Jak już wcześniej wspomniano, uproszczenie dwóch linijek to lekki przerost formy nad treścią. Zakładam jednak, że to przykład lub kod, który będzie w przyszłości rozbudowywany. W takim przypadku najlepiej przenieść powtarzający się kod do osobnej metody. Wtedy Twój kod wyglądałby następująco:

<?php
 
    public function query()
    {
        if( CzyWAdresieJestNick() )
        {
            $res = mysqli_query(...);
        }
        elseif( CzyZalogowany() )
        {
            $res = mysqli_query(...);
        }
        else
        {
           return $$this->obsluzBlad();
        }
 
        if(mysqli_num_rows($res) == 0)//zle podany nick
        {
            return $this->obsluzBlad();
        }
 
        $this->container = mysqli_fetch_assoc($res);
        return true;
 
    }
	
	private function obsluzBlad()
	{
		 page404();
         return false;
	}
 
?>  

Zaletą takiego rozwiązania jest to, że jakąkolwiek przyszłą modyfikację kodu robisz tylko w tym miejscu.
Ponadto, jeżeli planujesz użycie tego kodu w innych klasach, to warto rozważyć przeniesienie go na przykład do osobnej klasy narzędziowej.

[Mirek]

0

rozwiązanie, które ja preferuję, bez dodatkowych metod

<?php
 
    public function query()
    {
        $res = null;

        if( CzyWAdresieJestNick() )
        {
            $res = mysqli_query(...);
        }
        elseif( CzyZalogowany() )
        {
            $res = mysqli_query(...);
        }
 
        if($res && mysqli_num_rows($res) === 1)
        {
            $this->container = mysqli_fetch_assoc($res);
            return true;
        }
 
        page404();
        return false;
 
    }
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1