AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Klatsch und Tratsch Die häufigsten Programmierirrtümer
Thema durchsuchen
Ansicht
Themen-Optionen

Die häufigsten Programmierirrtümer

Ein Thema von Wolfgang Mix · begonnen am 24. Mär 2010 · letzter Beitrag vom 30. Mär 2010
Antwort Antwort
Seite 4 von 7   « Erste     234 56     Letzte »    
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#31

Re: Die häufigsten Programmierirrtümer

  Alt 24. Mär 2010, 23:12
@sx2008: Ist ein s := '' gleichzusetzen, wie s := nil? Wäre mir definitiv neu, wobei ich nicht weiß, wie das intern gehandelt wird.

Zitat von sx2008:
Delphi-Quellcode:
var
  s : string;
  i, anz_comment : integer;
begin
  // Sinn & Zweck: Zähle alle Zeilen, die mit * beginnen
  anz_comment : = 0;
  for i:=0 to Memo1.Lines.Count-1 do
  begin
    s := Memo1.Lines[i];

    // sollte die Zeile leer sein, also s ='' dann knallts hier richtig
    // es gibt eine Zugriffsverletzung, denn s zeigt auf nil
    // auch die Bereichsprüfung kann hier keinen Schutz bieten
    if s[1] = '*then
      Inc(anz_comment);
  end;
Hier will ich noch anbringen, dass ich es schon mehrfach gesehen habe, dass bei Schleifen entweder bei 1 angefangen wird und der Zähler dann als Index verwendet wird, wobei dieser dann nicht so verwendet wird Zähler - 1. Beim letzten Element schlägt dies dann folglich fehl. Oder dass zwar bei 0 begonnen wird zu zählen, aber bis (in diesem Fall) Memo1.Lines.Count läuft und nicht Memo1.Lines.Count - 1.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#32

Re: Die häufigsten Programmierirrtümer

  Alt 25. Mär 2010, 07:10
Hi,

aus meinen C Erfahrungen:

if (a = 0)

ist nicht das gleiche wie

if (a == 0)

Das ist ein Fehler der im nachhinein kaum noch zu finden ist.
Compiler meckert nicht. Im ersten Fall wird kein Vergleich durchgeführt sondern a die Null zugewiesen.

Ist zwar kein Fehler aber was ich überhaupt nicht leiden kann ist die C Schreibweise in Pascal:

Delphi-Quellcode:
extrem unschön:
If blabla then begin
...
end
sehr viel übersichtlicher:
If blabla then
   begin
     ...
   end
Was mich auch nervt ist mein eigener unkommentierter Kode,
den ich dann nach 4 Wochen selbst nicht mehr versteh!

Grüsse
Rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#33

Re: Die häufigsten Programmierirrtümer

  Alt 25. Mär 2010, 07:37
Zitat von R2009:
extrem unschön:
...
sehr viel übersichtlicher:
der 'extrem unschöne' Code wird von Programmierern, die viel Code lesen, bevorzugt. Das "Begin" auf einer separaten Zeile hat keine eigene Aussage: Das hier bedingter Code folgt, ist durch die Einrückung (horizontale Formatierung) schon hinreichend dokumentiert. Letztendlich ist es jedoch Geschmackssache und muss jeweils Teamweit festgelegt werden. Diskussionen > 5 min sind hier überflüssig. Wir haben das z.B. durch Abstimmung geregelt.
Zitat:
Was mich auch nervt ist mein eigener unkommentierter Kode, den ich dann nach 4 Wochen selbst nicht mehr versteh!
Dann schreib ihn so, das Du (man) ihn versteht. Das geht auch ohne Kommentare. Kommentare sind eh böse.

Was Du aber vielleicht eigentlich meinst, ist:
Ein großer Programmiererirrtum ist es, zu meinen, das Maß aller Dinge sei funktionierender Code.
Das Maß aller Dinge muss lesbarer Code sein (der kann im Nachhinein viel einfacher entwanzt werden).

Das schließt deine oben zitierte Meinung mit ein, hoffe ich.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#34

Re: Die häufigsten Programmierirrtümer

  Alt 25. Mär 2010, 07:53
Hi alzaimar,

Zitat:
der 'extrem unschöne' Code wird von Programmierern, die viel Code lesen, bevorzugt. Das "Begin" auf einer separaten Zeile hat keine eigene Aussage: Das hier bedingter Code folgt, ist durch die Einrückung (horizontale Formatierung) schon hinreichend dokumentiert. Letztendlich ist es jedoch Geschmackssache und muss jeweils Teamweit festgelegt werden. Diskussionen > 5 min sind hier überflüssig. Wir haben das z.B. durch Abstimmung geregelt.
Dies ist ganz einfach meine persönliche Meinung.
Ich will niemand davon überzeugen und ich will auch keine Diskussion darüber anfangen.

Zitat:
der 'extrem unschöne' Code wird von Programmierern, die viel Code lesen, bevorzugt.
das ist eine subjektive Aussage die für unser Umfeld hier nicht stimmt.

Grüsse
Rainer
Ps: konnte das einfach so nicht stehen lassen. Bitte keine Diskussion darüber anfangen!
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#35

Re: Die häufigsten Programmierirrtümer

  Alt 25. Mär 2010, 07:59
Zitat von alzaimar:
Zitat von R2009:
extrem unschön:
...
sehr viel übersichtlicher:
der 'extrem unschöne' Code wird von Programmierern, die viel Code lesen, bevorzugt. Das "Begin" auf einer separaten Zeile hat keine eigene Aussage: Das hier bedingter Code folgt, ist durch die Einrückung (horizontale Formatierung) schon hinreichend dokumentiert.
Was ich mir aber abgewöhnt habe ist folgendes:
Delphi-Quellcode:
if ... then
   ...; // eine Zeile
stattdessen:
Delphi-Quellcode:
if ... then
begin
  ...; // eine Zeile
end;
Ich fasse auch Rümpfe in begin und end ein, auch wenn sie nur eine Zeile umfassen. Einfach aus dem Grund, weil der Rumpf eventuell später erweitert wird und man dann vergisst das begin und end zu ergänzen. Bei dem daraus resultierenden Fehlverhalten kann man sich manchmal dumm und dämlich suchen. So was vermeide ich somit von vorne herein.

Das mache ich übrigens in allen Programmiersprachen so, sei es in Delphi oder PHP. Ich habe sogar schon Code vom Kollegen dahingehend angepasst.

Was Kommentare angeht: Sie generell als böse zu bezeichnen ist auch nicht ganz richtig, wie eigentlich fast jede Pauschlisierung. Aber wenn man etwas kommentiert, dann höchstens das Warum. Das Wie sehe ich am Code. Denn jemand der den Code liest wird sich meist fragen: Warum macht der das? Wenn dann da steht "Workaround wegen Bug XYZ", dann weiß derjenige Bescheid und ändert die Stelle nicht, weil er denkt es wäre überflüssig oder so und baut somit wieder einen schon beseitigten Fehler ein.
Auch habe ich mir angewöhnt, wenn ich fremden Code ändere meine Änderungen zu markieren mit:
Delphi-Quellcode:
// [mp:start]
...;
...;
...;
// [mp:end]
(mp ist mein Kürzel in der Firma.) Dann sehe ich sofort welcher Code von mir ist und ich kann ihn im Fall der Fälle über die Such-Funktion auch schneller wiederfinden. Leider habe ich meinen Kollegen noch nicht dazu bringen können dies auch zu tun. Wenn ich jetzt einen Fehler beheben muss, weiß ich teilweise nicht, ob der Fehler vom Framework stammt oder in vom Kollegen nachträglich hinzugefügten Code. Ich habe schon Stunden mit der Fehlersuche verbracht, wo es dann nachher hieß: "Äh, Moment, der Code ist von mir. Ich weiß, was da nicht stimmt."
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Cylence
Cylence

Registriert seit: 2. Sep 2004
Ort: Allgäu
246 Beiträge
 
Delphi 7 Enterprise
 
#36

Re: Die häufigsten Programmierirrtümer

  Alt 25. Mär 2010, 08:35
hmm

ich glaub ich hab auch noch was, ein bekannter von mir macht ständig sachen

onFormActivate

besser wär aber onFormshow, weil activate wird aufgerufen wenn man mal auf den desktop klickt und dann wieder auf das fenster....hat schon einige probleme gegeben hier...


Gruß

tom
Tom
Just DO it
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#37

Re: Die häufigsten Programmierirrtümer

  Alt 25. Mär 2010, 08:53
Nun ja, das ist aber weniger ein Irrtum, als ein Fehler würde ich sagen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#38

Re: Die häufigsten Programmierirrtümer

  Alt 25. Mär 2010, 09:26
Ein häufiger Irrtum ist :
for i := 1 to StringList.Count ... Das ist eben das Versehen, zu vergessen, dass das bei 0 anfängt und dementsprechend bei count-1 Schluss ist. "Listenindex überschreitet das Maximum XY".

Aber was ist hieran auszusetzen, bzw. unschön, mal davon abgesehen, dass es sich keineswegs um einen Irrtum handelt :

Zitat von R2009:
Ist zwar kein Fehler aber was ich überhaupt nicht leiden kann ist die C Schreibweise in Pascal:

Delphi-Quellcode:
extrem unschön:
If blabla then begin
...
end

sehr viel übersichtlicher:
If blabla then
   begin
     ...
   end
Ich bevorzuge die erste Variante. Bei mir einzige Abweichung vom ansonsten IMHO guten Styleguide. Auch die zweite entspricht übrigens nicht dem offiziellen Styleguide. Grund für 1. Variante : wenn sich was verirrt, dann ein END; Oder ein begin wird vergessen. Ist so etwas passiert, dann will ich auch direkt sehen, ob das zu if, while oder sonstwas gehört. Das vom Styleguide, also das BEGIN bündig unter das zugehörige IF etc. zu schreiben läuft zwar ungefähr auf dasselbe hinaus. Notfalls geht man vom END; aus einfach nach oben, hat das entsprechende IF und sieht, ob das BEGIN am Ende der Zeile steht. Oder eben eine Zeile darunter. Aaaaber : es dürfte keine Seltenheit sein, dass eine Prozedur mit 10 IF...BEGIN usw. sagen wir mal 70 Zeilen hat. Die geht dann auf eine DIN A 4 Seite. Werden 10 BEGIN in extra Zeilen geschrieben, dann sinds schon 80 und die Seite reicht knapp eben nicht. Verschachtelungstiefe ist dann auch nicht sofort erkennbar. Für Bildschirm gilt ähnliches. Es muss unnötigerweise mehr gescrollt werden etc. Bei neueren Delphi-Versionen ist dieses Problem aber auch durch Ein/Ausklappen etwas entschärft. Betonung liegt dabei auf "etwas".

Wer nur nach Zeilen bezahlt wird, der richte sich allerdings wirklich besser 100% nach dem Styleguide.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#39

Re: Die häufigsten Programmierirrtümer

  Alt 25. Mär 2010, 11:32
Zitat von Hansa:
Ein häufiger Irrtum ist :
for i := 1 to StringList.Count ... Das ist eben das Versehen, zu vergessen, dass das bei 0 anfängt und dementsprechend bei count-1 Schluss ist. "Listenindex überschreitet das Maximum XY".
Dazu die Worte meines (alten) Informatik-Professors, der inzwischen schon sicherlich nicht mehr auf dieser Erde weilt:
Zitat:
Es ist immer eins mehr oder weniger als man denkt
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#40

Re: Die häufigsten Programmierirrtümer

  Alt 25. Mär 2010, 11:43
Zitat von R2009:
aus meinen C Erfahrungen:

if (a = 0)

ist nicht das gleiche wie

if (a == 0)
Das ist mir auch mehrfach passiert, besonders wenn man von Pascal = als Vergleichsoperator gewöhnt ist

Zitat von joachimd:
Dazu die Worte meines (alten) Informatik-Professors, der inzwischen schon sicherlich nicht mehr auf dieser Erde weilt:
Zitat:
Es ist immer eins mehr oder weniger als man denkt
Der Fehlertyp hat sogar seinen eigenen Namen: Off-by-One-Error
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 7   « Erste     234 56     Letzte »    


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 aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz