Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   boolean function: muss result := false gesetzt werden? (https://www.delphipraxis.net/212008-boolean-function-muss-result-%3D-false-gesetzt-werden.html)

JanWe 1. Dez 2022 17:24

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:
function isSpecialString(A: String): boolean;
var T : String;
begin
  // <<< hier muß ich result := false; setzen
  if A[0] = '&' then
  result := true;
end;
Wenn ich am Anfang der Funktoin "result := false;" nicht als FALSE darstelle und
die Funktion aufrufe
Delphi-Quellcode:
if not isSpecialString ('Kapitalertragssteuerirgendwasblabla') then exit
else
bla;
wird direkt bla ausgeführt, nicht aber exit;.

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?

gmc616 1. Dez 2022 17:35

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.

bernau 1. Dez 2022 17:44

AW: boolean function: muss result := false gesetzt werden?
 
Result ist erst mal nicht definiert. Mit deinem
Delphi-Quellcode:
Result = True
ist der Zustand definiert. Läufst du die Zeile nicht durch, dann kann Result alles sein, weil undefinierter Zustand

Probier es mal hiermit:

Delphi-Quellcode:
function isSpecialString(A: String): boolean;
begin
  result := A[0] = '&';
end;
Ich würde aber vorher noch auf Länge prüfen, weil es ja sein kann, dass der String leer ist.

Und bist du dir sicher, dass A[0] und nicht A[1] meinst? Ein String fängt bei 1 an.

JanWe 1. Dez 2022 19:20

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.

TSchnuckenbock 1. Dez 2022 20:16

AW: boolean function: muss result := false gesetzt werden?
 
Zitat:

Zitat von gmc616 (Beitrag 1515736)
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.

Mach ich genauso. Ich verlass mich nicht darauf, daß irgendeine Variable einen Default bereits hat.

mjustin 1. Dez 2022 20:29

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:

Local reference-counted* variables are always initialized to nil or '';
https://stackoverflow.com/a/132770/80901


Barry Kelly schrieb dazu:
Zitat:

Local variables are initialized as if they were passed to the Initialize routine. The Initialize routine uses runtime type-info (RTTI) to zero-out fields (recursively - if a field is of an array or record type) and arrays (recursively - if the element type is an array or a record) of a managed type, where a managed type is one of:

AnsiString
UnicodeString
WideString
an interface type (including method references)
dynamic array type
Variant
https://stackoverflow.com/a/861178/80901

jaenicke 1. Dez 2022 22:13

AW: boolean function: muss result := false gesetzt werden?
 
Zitat:

Zitat von JanWe (Beitrag 1515735)
Muß ich result am Anfang der Funktion immer erst auf FALSE setzen?
Ich dachte, das braucht man nicht.

Dazu sollte es aber auch eine Compilerwarnung geben, dass Result evtl. nicht initialisiert ist. Diese sollten natürlich alle beachtet werden.

gmc616 1. Dez 2022 23:04

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:

Medium 1. Dez 2022 23:34

AW: boolean function: muss result := false gesetzt werden?
 
Zitat:

Zitat von gmc616 (Beitrag 1515754)
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:

Seelenverwandter in allen Punkten hier :love:

dummzeuch 2. Dez 2022 08:03

AW: boolean function: muss result := false gesetzt werden?
 
Hört sich nach Cargo Cult programming an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.
Seite 1 von 2  1 2      

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