Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V  < 1 2  
Reply to this topicStart new topic
> [php] optymalny zapis
Crozin
post 3.08.2010, 00:08:34
Post #21





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


@fifi209, @kapuch: Chodziło o sytuację gdzie zależy nam tylko na inkrementacji wartości zmiennej, np.:
  1. for (...; ...; ++$i)
  2. if () {
  3. ++$j;
  4. }
W tych przypadkach nie ma realnej różnicy.

Szczerze to jestem zdziwiony jak długo się ten wątek ciągnie, więc tam na zakończenie (oby)
1) Mikroptymalizacja z reguły jest pozbawiona sensu w "zadaniach wysokiego poziomu" - to odnośnie pre/postinkrementacji, używania bloków if/else lub ?: itp.
2) Kod powinno się pisać czytelny. Jeżeli jeden zapis jest czytelniejszy od drugiego to można z niego skorzystać. A to kiedy coś jest czytelne... no tyle to już chyba potraficie sami ocenić?
Go to the top of the page
+Quote Post
S3L41N
post 3.08.2010, 09:04:50
Post #22





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.12.2007

Ostrzeżenie: (0%)
-----


No dobrze, ale są jakieś konkretne wytyczne kiedy używać jednego zapisu, a kiedy drugiego?
Których z zapisów jest bardziej poprawny, czytelny i zalecany w następujących sytuacjach?
Sytuacja 1:
  1. //1.1
  2. $syshelpers = file_exists($syspath = trim(FRAMEWORKSDIR.'/'.HELPERSDIR, '/')) ? array_slice(scandir($syspath), 2) : array();
  3. //1.2
  4. if (file_exists($syspath = trim(FRAMEWORKSDIR.'/'.HELPERSDIR, '/')))
  5. $syshelpers = array_slice(scandir($syspath), 2);
  6. else
  7. $syshelpers = array();
  8. //1.3
  9. $syshelpers = array();
  10. if (file_exists($syspath = trim(FRAMEWORKSDIR.'/'.HELPERSDIR, '/')))
  11. $syshelpers = array_slice(scandir($syspath), 2);

Sytuacja 2:
  1. //2.1
  2. $type = (substr($type, -1) == 'y') ? substr($type, 0, -1).'ies' : $type.'s';
  3. //2.2
  4. if (substr($type, -1) == 'y')
  5. $type = substr($type, 0, -1).'ies';
  6. else
  7. $type = $type.'s';

Sytuacja 3:
  1. //3.1
  2. return (isset($this->$key) OR isset($this->data[$key])) ? TRUE : FALSE;
  3. //3.2
  4. if (isset($this->$key) OR isset($this->data[$key]))
  5. return TRUE;
  6. return FALSE;
  7. //3.3
  8. if (isset($this->$key) OR isset($this->data[$key]))
  9. return TRUE;
  10. else
  11. return FALSE;

Sytuacja 4:
  1. //4.1
  2. return (isset($this->$key) ? $this->$key : (isset($this->data[$key]) ? $this->data[$key] : NULL));
  3. //4.2
  4. return (isset($this->$key) ? $this->$key :
  5. (isset($this->data[$key]) ? $this->data[$key] :
  6. NULL));
  7. //4.3
  8. if (isset($this->$key))
  9. return $this->$key;
  10. elseif (isset($this->data[$key])
  11. return $this->data[$key];
  12. else
  13. return NULL;
  14. //4.4
  15. if (isset($this->$key))
  16. return $this->$key;
  17. else if (isset($this->data[$key])
  18. return $this->data[$key];
  19. else
  20. return NULL;
  21. //4.5
  22. if (isset($this->$key))
  23. return $this->$key;
  24. if (isset($this->data[$key])
  25. return $this->data[$key];
  26. return NULL;

Sytuacja 5:
  1. //5.1
  2. return isset(self::$instance) ? self::$instance : self::$instance = new self;
  3. //5.2
  4. if (isset(self::$instance))
  5. return self::$instance;
  6. else
  7. return self::$instance = new self;
  8. //5.3
  9. if (isset(self::$instance))
  10. return self::$instance;
  11. return self::$instance = new self;
  12. //5.4
  13. if (!isset(self::$instance))
  14. self::$instance = new self;
  15. return self::$instance;

Które z nich, a może jakieś inne są najbardziej poprawne?
Go to the top of the page
+Quote Post
Crozin
post 3.08.2010, 11:24:22
Post #23





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


No ileż można - który zapis wydaje Ci się najbardziej przejrzysty? Wariant pierwszy, drugi lub trzeci - używaj który Tobie najbardziej pasuje. Mnie pasuje czwarty Tobie drugi - używaj sobie drugiego. Nie ma żadnych wytycznych - to tylko forma zapisu!
Go to the top of the page
+Quote Post
S3L41N
post 3.08.2010, 11:58:54
Post #24





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.12.2007

Ostrzeżenie: (0%)
-----


No ok, to poprostu napisz, które zapisy Ty byś wybrał...
Go to the top of the page
+Quote Post
attimo
post 3.08.2010, 12:04:20
Post #25





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


Ja też wole 4. może i wdurgim kod jest krótszy prawie 4 krotnie, ale jeśli musiałbym tam coś zmieniac to rozszyfrowanie tego zajeło by mi wiecej czasu dlatego wole już wiecej linijek ale czytelniej choc slowo czytelniej jest subiektywne i dla kogos innego sytuacja 2 moze byc czytelniejsza.
Go to the top of the page
+Quote Post
S3L41N
post 3.08.2010, 13:26:19
Post #26





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.12.2007

Ostrzeżenie: (0%)
-----


attimo widzę, że chyba nie wczytałeś się w posta. Jest pięć sytuacji z różnymi możliwościami rozwiązań (kolejne rozwiązania dla poszczególnych sytuacji są wypunktowane w komentarzach).
Go to the top of the page
+Quote Post
Crozin
post 3.08.2010, 13:56:32
Post #27





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


#1
  1. $syspath = trim(FRAMEWORKSDIR.'/'.HELPERSDIR, '/');
  2. $syshelpers = file_exists($syspath) ? array_slice(scandir($syspath), 2) : array();
#2
  1. $type = substr($type, -1) == 'y' ? substr($type, 0, -1).'ies' : $type.'s';
#3
  1. return isset($this->$key) || isset($this->data[$key]);
#4
  1. if (isset($this->$key)) {
  2. return $this->$key;
  3. } elseif (isset($this->data[$key]) {
  4. return $this->data[$key];
  5. }
  6.  
  7. return NULL;
#5
  1. if (!isset(self::$instance)) {
  2. self::$instance = new self;
  3. }
  4.  
  5. return self::$instance;
Tylko nie wiem po co to podaję. Naprawdę tak ciężko ocenić co dla siebie samego jest wygodne?

Ten post edytował Crozin 3.08.2010, 13:57:03
Go to the top of the page
+Quote Post

2 Stron V  < 1 2
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.06.2025 - 10:36