php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Thema geschlossen
 
LinkBack Themen-Optionen Thema bewerten
Alt 18.12.2006, 13:11  
Neuer Benutzer
 
Registriert seit: 18.12.2006
Beiträge: 4
hanckn
Standard Schaden leere else-Zweige der Performance?

Hallo ihr alle,
ich hatte mit einem Kollegen einen kleinen Disput über leere elses.

Ist zum Beispiel

PHP-Code:
if($foo==1){
...
}
else{} 
langsamer als

PHP-Code:
if($foo==1){
...

Ich habe gelernt, dass der Compiler (z.B. bei C - der bei PHP freilich durch den Interpreter ersetzt ist) nach elses sucht und man sie deshalb stets aufführen sollte. Im Netz habe ich dazu keine Infos gefunden, auch wenn es viele Seiten mit hilfreichen Tipps zur Optimierung gibt.
Zum Teil mag das auch Geschmacksfrage sein, insofern: wie seht ihr das?

Vielen Dank,
hanckn
hanckn ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 18.12.2006, 13:23  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

der performance-unterschied ist komplett vernachlässigbar und zieht meiner meinung nach nicht als argument.

PHP-Code:
if (foo()) {
  
bar();
} else {} 
ist dennoch unsinn.

wichtig ist die lesbarkeit des codes:

PHP-Code:
if (foo()) {
  
bar();
} else {
  
// do nothing

ist besser als
PHP-Code:
if (foo()) {
 
bar();

.

grund:
im ersten beispiel ist der zweig zwar leer, aber
* durch den kommentar zeigt man dem nachfolger, dass man sich beim weglassen des zweiges was gedacht hat
* sollte sich später was ändern und ein else dann doch nötig werden, ist die einrückung etc. gleich richtig und der nachfolger kann gleich loslegen.

grüße
axo
axo ist offline  
Alt 18.12.2006, 13:47  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
der performance-unterschied ist komplett vernachlässigbar
Stimme ich zu.

Zitat:
grund:
im ersten beispiel ist der zweig zwar leer, aber
* durch den kommentar zeigt man dem nachfolger, dass man sich beim weglassen des zweiges was gedacht hat
Stimme ich nicht zu. Wenn ich else weglasse, dann weil es nicht benötigt wird. Leere else-Zombies im Code verstreuen finde ich überflüßig und störend.

Zitat:
* sollte sich später was ändern und ein else dann doch nötig werden, ist die einrückung etc. gleich richtig und der nachfolger kann gleich loslegen.
Verstehe ich nicht, bzw. ist "komplett vernachlässigbar"
Zergling-new ist offline  
Alt 18.12.2006, 14:06  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

meine meinung:
* das 'else' kommt später irgendwann einmal auf jeden fall dazu. irgendwas ist immer
* ein 'if ohne else' fällt bei jedem code review erstmal auf und bremst: "bist du sicher, dass es da keinen anderen fall gibt?", "was passiert, wenn foo() false ausgibt?" ... hier ist der kommentar "// do nothing" nicht schlecht. meist ist es nämlich kein "do nothing", sondern ein " TODO - insert proper exception handling here ..." ... denn meist ist ein fehlendes else einfach ein zeichen dafür, dass der programmierer nicht alle fälle bedacht und abgedeckt hat.
* es wird relativ wenige else-zombies geben, die auch wirklich welche sind, d.h. das else bleibt für immer leer.


ich sage also: in den meisten fällen wird ein else später eh benötigt, also kann man die klammern gleich setzen. aber nicht so: "} else {}"

das "else" komplett wegzulassen (d.h. ein if-statement alleine) ist von mir aus auch ok.

man muss daraus jetzt auch keine religion machen - wenn man so viel zeit hat, sich gedanken darüber zu machen, ist eh irgendwas faul

grüße
axo
axo ist offline  
Alt 18.12.2006, 15:38  
Benutzer
 
Registriert seit: 09.12.2006
Beiträge: 33
sono
Standard

Zitat:
Zitat von axo
meine meinung:
* das 'else' kommt später irgendwann einmal auf jeden fall dazu. irgendwas ist immer
Das glaube ich kaum, es gibt genügend gegenbeispiele bei denen kein else keinen sinn mehr macht.

Zitat:
Zitat von axo
* ein 'if ohne else' fällt bei jedem code review erstmal auf und bremst: "bist du sicher, dass es da keinen anderen fall gibt?", "was passiert, wenn foo() false ausgibt?" ... hier ist der kommentar "// do nothing" nicht schlecht. meist ist es nämlich kein "do nothing", sondern ein " TODO - insert proper exception handling here ..." ... denn meist ist ein fehlendes else einfach ein zeichen dafür, dass der programmierer nicht alle fälle bedacht und abgedeckt hat.
Das ist wohl Stilsache, mich persönlich würden wohl eher die unnötigen else stören die den Code nur unnötig aufblähen, keinen Sinn haben, und dafür sorgen, dass die Datei nochmal 40 Zeilen Länger ist.

Zitat:
Zitat von axo
* es wird relativ wenige else-zombies geben, die auch wirklich welche sind, d.h. das else bleibt für immer leer.
Das kommt wieder ganz drauf an wie einer arbeitet.

Bei Konstrukten wie:

PHP-Code:
if( ! is_array($data) ){
 throw new 
Exception("Falsches Format");

is besagtes else einfach unnötiger Codebalast.

Zitat:
Zitat von axo
ich sage also: in den meisten fällen wird ein else später eh benötigt, also kann man die klammern gleich setzen. aber nicht so: "} else {}"

das "else" komplett wegzulassen (d.h. ein if-statement alleine) ist von mir aus auch ok.

man muss daraus jetzt auch keine religion machen - wenn man so viel zeit hat, sich gedanken darüber zu machen, ist eh irgendwas faul

grüße
axo
Man kann das nicht verallgemeinern, je nach Stil kann es Sinnvoll sein oder nicht.
Die Performace ist vernachlässigbar in dem Fall das ist kaum messbar was das ausmacht.

Wichtiger ist den Code übersichtlich zu halten, meiner Meinung nach heißt übersichtlich auch unnötige Sachen gar nicht erst rein zu hauen, aber da hat so oder so jeder einen anderen Geschmack und ein Ästhetikempfinden.

Gruß Sono
sono ist offline  
Alt 18.12.2006, 17:58  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Stimme sono und Zergling zu, hab dem auch nix weiter hinzuzufügen. Naja, doch eins noch: Mit der Einrückung. Ich wüsste nicht, wieso ein leeres "else" später anderen Programmierern bei der Einrückung helfen sollte ^^ Ich denke, dass es genauso einfach ist mit Leertaste und Tab umzugehen, wenn kein leeres "else" dabei ist.

Zu Compiler: Es mag sein, dass C-Compiler nach else-Blöcken suchen, wobei ich aber glaube ma gehört zu haben, dass er, falls er leer ist, auch im Kompilier-Prozess entfernt wird. Also quasi genauso, wie Konstanten, die im gesamten Code bereits ersetzt werden (ändert sich ja eh net mehr ^^). Insofern verlamgsamt er zwar (vernachlässigbar) den Prozess, nicht aber die Ausführung später.

Meine Überlegung war schon mal, ob man sich ein Script (oder Prgramm) schreibt, das andere Scripte (oder Programme) performanter umschreibt (und vielleicht etwas weniger lesbar ^^). Das wurde hier aber scho durchdiskutiert und abgelehnt
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 18.12.2006, 19:13  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

@axo, dann fehlt dir einfach die Vorstellungskraft
Zum Beispiel sehen viele meiner Funktionen so aus:

PHP-Code:
<?php
function myFunc($param1)
{
   if (
fehler_1_aufgetreten) {
     return 
MYFUNC_FEHLER_1;
   }
   if (
fehler_2_aufgetreten) {
     return 
MYFUNC_FEHLER_2;
   }
   
   
// mach was
   
return true;
}
?>
Da mache ich absichtlich keine else-Blöcke rein, sonst hättest du ein
PHP-Code:
<?php
function myFunc($param1)
{
   if (!
fehler_1_aufgetreten) {
     if (!
fehler_2_aufgetreten) {
        
// mach was
     
} else {
        return 
MYFUNC_FEHLER_2;
     }
   } else {
     return 
MYFUNC_FEHLER_1;
   }
}
?>
Das ist mal echt ugly-Code!
Aber hierdrüber zu diskutieren ist bissl unnütz. Wenn es dir gefällt (und das ist jetzt nicht abwertend gemeint, auch wenn es so klingt), dann machs einfach wie du willst!
Ich schätz dich zumindest kompetent genug ein, dass daraus kein Monsterbläh-Code wird.

Zitat:
das andere Scripte (oder Programme) performanter umschreibt
Darauf wär ich ja mal gespannt
Zergling-new ist offline  
Alt 18.12.2006, 19:22  
Erfahrener Benutzer
 
Registriert seit: 17.02.2006
Beiträge: 132
PHP-Kenntnisse:
Fortgeschritten
marcusson befindet sich auf einem aufstrebenden Ast
Standard

Tja - die reine Lehre sagt, dass Else-Blöcke grundsätzlich geschrieben werden MÜSSEN, weil das Konstrukt sonst aus mathematischer Sicht unvollständig ist, denn es existiert mindestens ein undefinierter Fall.

Die Vernunft sagt, dass Else-Blöcke dort geschrieben werden SOLLTEN, wo es der Logik und dem Verständnis hilft.

Die Realität lehrt uns etwas anderes. Else-Blöcke, die Erklärungen enthalten welche für den Code nicht zwingend erforderlich sind, aber ihn verbessern, oder dem Verständnis dienen, sprechend benannte Variablen und hilfreiche Kommentare mit Erläuterungen und Beispielen haben auf Grund der ALLGEMEINEN FAULHEIT etwas gemeinsam mit dem Wasser in der Sahara. Man muss lange suchen um sie zu finden.
marcusson ist offline  
Alt 18.12.2006, 20:45  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

PHP-Code:
Tja - die reine Lehre sagtdass Else-Blöcke grundsätzlich geschrieben werden MÜSSENweil das Konstrukt sonst aus mathematischer Sicht unvollständig istdenn es existiert mindestens ein undefinierter Fall
Stört meiner Logik grad etwas: Wenn du einen else-Block formulierst, dann sind eben die sonst undefinierten Fälle definiert ^^ Gerade wenn du den else-Block weglässt, ist der "Ansonsten"-Fall undefiniert.
Was mich aber eigentlich stört: Der zweite Fall ist ja nicht undefiniert, es passiert bloss nix ^^

Zitat:
Die Vernunft sagt, dass Else-Blöcke dort geschrieben werden SOLLTEN, wo es der Logik und dem Verständnis hilft.
Naja, aber wenn er leer ist, hilfts genauso, also wenn er nich da is ^^ Is ja auch irgendwie äquivalent

Zitat:
Die Realität lehrt uns etwas anderes. Else-Blöcke, die Erklärungen enthalten welche für den Code nicht zwingend erforderlich sind, aber ihn verbessern, oder dem Verständnis dienen, sprechend benannte Variablen und hilfreiche Kommentare mit Erläuterungen und Beispielen haben auf Grund der ALLGEMEINEN FAULHEIT etwas gemeinsam mit dem Wasser in der Sahara. Man muss lange suchen um sie zu finden.
Äh ... Es geht hier um leere else-Blöcke ^^ Warum sollte ich x zusätzliche else-Blöcke schreiben, in denen jedes mal "// Does nothing" drin steht? Es verbessert den Code marginal und dem Verständnis hilft es auch nicht. Sprechende Variablen und Kommentare geb ich dir Recht, wobei sich vielleicht da auch nur "was ist sprechend?" und "Was ist ein hilfreichender Kommentar?" unterscheidet Der eine macht ne Zählvariable mit $i, der andere mit $zähler. Zweiteres ist "sprechender", aber sinnvoller oder verständlicher?
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 18.12.2006, 20:47  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von Zergling
Zitat:
das andere Scripte (oder Programme) performanter umschreibt
Darauf wär ich ja mal gespannt
Hatten wir doch schon ma hier ^^ Bei Langeweile such ichs ma raus Problem war glaub ich, dass es sich nicht lohnt und man im Endeffekt mit dem "perfomanteren Code" etwa irgendwie 10^-1000 sec spart ^^
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Thema geschlossen


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Voraussetzungen für dieses Thumbnail Skript Plague PHP Tipps 2008 9 19.09.2007 13:35

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php else do nothing, leeres else, c leeres else, leere if-zweige, leerer if zweig, fehlendes else, leeres else c, leere else zweig, leeres else php, php bei if else zweig notwendig, if ohne else, else zweig ja zweig oder nein zweig performance, leerer else zweig, php else leer lassen, c code gleiche ausführzeit für if und else zweig, php else notwendig, php if else perfomance, else notwendig php?, else ohne code, leeres if

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:25 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.