![]() |
Delphi-Version: 5
boolean function: muss result := false gesetzt werden?
Hi,
ich wollte eine Funktion mit Rückgabewert Booelan in eine andere, aber eingebundene unit auslagern. (eigentlich egal, wo) Darin habe ich die function wie folgt aufgebaut: (oben, vor implementation wird sie auch mit xxx; forward; aufgerufen)
Delphi-Quellcode:
Wenn ich am Anfang der Funktoin "result := false;" nicht als FALSE darstelle und
function isSpecialString(A: String): boolean;
var T : String; begin // <<< hier muß ich result := false; setzen if A[0] = '&' then result := true; end; die Funktion aufrufe
Delphi-Quellcode:
wird direkt bla ausgeführt, nicht aber exit;.
if not isSpecialString ('Kapitalertragssteuerirgendwasblabla') then exit
else bla; Ist das so? Muß ich result am Anfang der Funktion immer erst auf FALSE setzen? Ich dachte, das braucht man nicht. Oder mach ich was falsch? |
AW: boolean function: muss result := false gesetzt werden?
Ja!
Ich setze das Result immer gleich als aller erstes auf FALSE. Sonst passiert genau das, wie du beschreibst. Getreu nach dem Motto: Am Anfang einer Function/Procedure alle Variablen initialisieren, d.h. einen Startwert geben. Und dazu gehört auch das Result. Ist mMn auch Speicher-technisch zu erklären (bitte korrigiere, sollte ich falsch liegen): Das Result der einen Funktion liegt immer an der gleichen Speicheradresse. Ein mal auf TRUE gesetzt, bleibt es auf TRUE. |
AW: boolean function: muss result := false gesetzt werden?
Result ist erst mal nicht definiert. Mit deinem
Delphi-Quellcode:
ist der Zustand definiert. Läufst du die Zeile nicht durch, dann kann Result alles sein, weil undefinierter Zustand
Result = True
Probier es mal hiermit:
Delphi-Quellcode:
Ich würde aber vorher noch auf Länge prüfen, weil es ja sein kann, dass der String leer ist.
function isSpecialString(A: String): boolean;
begin result := A[0] = '&'; end; Und bist du dir sicher, dass A[0] und nicht A[1] meinst? Ein String fängt bei 1 an. |
AW: boolean function: muss result := false gesetzt werden?
achso, äh, ja, ich meine a[1], [eigentlich sowieso eine andere Stelle, das war nur als DEMO]
die Strings sind immer nicht-leer. Aber danke ich dachte, daß Result mit FALSE vorbelegt wäre. |
AW: boolean function: muss result := false gesetzt werden?
Zitat:
|
AW: boolean function: muss result := false gesetzt werden?
Lokale Variablen mit Referenzzählung werden immer mit nil (oder '') initialisiert. Alle anderen muss man selber initialisieren.
Zitat:
![]() Barry Kelly schrieb dazu: Zitat:
![]() |
AW: boolean function: muss result := false gesetzt werden?
Zitat:
|
AW: boolean function: muss result := false gesetzt werden?
In meinen Augen immer diese Regeln beachten.
In jeder Function/Procedure/Methode: a.) alle Functions-Variablen von Anfang an vorbelegen, im Delphi gleich nach Begin auch das Result, wie gelernt (siehe oben) b.) alle Parameter auf Gültigkeit prüfen, immer! Im Delphi evtl. nicht so nicht das Thema, in anderen Sprachen schon. c.) keine Compiler-Warnung ignorieren, niemals. Man verliert in größeren Projekten den Überblick, was wirklich ernst vom Compilier gemeint ist, oder was man seiner eigenen Meinung nach "vernachlässigen" kann. Seit dem ich u.a. diese 3 Punkte berücksichtige, laufen meine Projekte wesentlich stabiler. Und ich bin einer, der mittlerweile über 35 Jahren (Gott, bin ich alt^^) mit Programmierung zu tun hat, in den unterschiedlichsten Sprachen. Diese 3 Regeln führen immer zu einer stabileren Anwendung, egal in welcher Sprache du sie schreibst. Und, ganz wichtig: Bevor du in einem Forum wie DP eine längeren Text postet, kopieren den Text vorher ins Clipboard, bevor du auf [Antworten] klickst. :twisted: Alles Erfahrungswerte. :thumb: |
AW: boolean function: muss result := false gesetzt werden?
Zitat:
|
AW: boolean function: muss result := false gesetzt werden?
Hört sich nach Cargo Cult programming an.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz