AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language boolean function: muss result := false gesetzt werden?
Thema durchsuchen
Ansicht
Themen-Optionen

boolean function: muss result := false gesetzt werden?

Ein Thema von JanWe · begonnen am 1. Dez 2022 · letzter Beitrag vom 2. Dez 2022
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von JanWe
JanWe

Registriert seit: 23. Mär 2015
Ort: NRW
78 Beiträge
 
Delphi 7 Personal
 
#1

boolean function: muss result := false gesetzt werden?

  Alt 1. Dez 2022, 18:24
Delphi-Version: 5
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?
Jan
Allen demnächst ein gutes 2023!
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#2

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

  Alt 1. Dez 2022, 18:35
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.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 1. Dez 2022, 18:44
Result ist erst mal nicht definiert. Mit deinem 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.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von JanWe
JanWe

Registriert seit: 23. Mär 2015
Ort: NRW
78 Beiträge
 
Delphi 7 Personal
 
#4

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

  Alt 1. Dez 2022, 20:20
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.
Jan
Allen demnächst ein gutes 2023!
  Mit Zitat antworten Zitat
TSchnuckenbock

Registriert seit: 20. Jul 2017
Ort: Lüneburger Heide
71 Beiträge
 
Delphi XE5 Professional
 
#5

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

  Alt 1. Dez 2022, 21:16
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.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#6

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

  Alt 1. Dez 2022, 21:29
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
Michael Justin
habarisoft.com

Geändert von mjustin ( 1. Dez 2022 um 21:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 1. Dez 2022, 23:13
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#8

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

  Alt 2. Dez 2022, 00:04
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.

Alles Erfahrungswerte.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#9

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

  Alt 2. Dez 2022, 00:34
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.

Alles Erfahrungswerte.
Seelenverwandter in allen Punkten hier
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.596 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

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

  Alt 2. Dez 2022, 09:03
Hört sich nach Cargo Cult programming an.
Thomas Mueller
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:48 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