AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

array[1..10] auf Wert prüfen?

Ein Thema von MicMic · begonnen am 9. Aug 2018 · letzter Beitrag vom 9. Dez 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: array[1..10] auf Wert prüfen?

  Alt 10. Aug 2018, 20:15
Nimm lieber eine auf False Prüfen Variante wie diese hier, damit wird es nie zu Problemen kommen.
Delphi-Quellcode:
b:= True;
for i:= Low(w) to High(w) do
begin
  if not w[i] then
  begin
    b:= False;
    break;
  end;
end;
False kann/sollte immer nur 0 ergeben, True kann vieles sein.


edit
also auf code Ebene runtergeschraubt
Delphi-Quellcode:
  if not w[i] then
//
  if w[i] = 0 then
..
  if w[i] then
//
  if w[i] > 0 then
Beim kompilieren hat Delphi Wert 1 für True, aber nicht alle Trues sind 1, verstehst Du was ich damit sagen will?
Gruß vom KodeZwerg

Geändert von KodeZwerg (10. Aug 2018 um 20:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#2

AW: array[1..10] auf Wert prüfen?

  Alt 10. Aug 2018, 20:23
Die Konstante true ist mit 1 belegt, tatsächlich ist aber alles <> 0 true. Windows-API-Funktionen geben z.B. gern einmal eine negierte 0 zurück, welcher Wert das dann ist, hängt von der Bitbreite ab. Auf jeden Fall schlägt der Vergleich mit 1 dann fehl.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#3

AW: array[1..10] auf Wert prüfen?

  Alt 11. Aug 2018, 10:29
Ich frag' mich immer, warum sollte ich if variabel = true then schreiben. wenn doch if varibel then vollkommend ausreichend ist? Wahrer als wahr wird es nicht.

Oder:

Warum sollte ich if variabel = false then schreiben, wenn doch if not variabel then ausreicht? Falscher als falsch wird es nicht.

Von mir aus kann man auch noch
Delphi-Quellcode:
case variabel of
  false : Irgendwas;
else
  was anderes;
end;
machen.

Aber, wenn man bei
Delphi-Quellcode:
case variabel of
  false : irgendwas;
  true : Nochwas;
else
  UppsWas;
end;
in den Else-Zweig kommt, dann ist der Fall eingetreten, vor dem hier ausdrücklich gewarnt wird.

Und wer mal mit Datenbanken arbeitet und .AsBoolean benutzt weiß, dass das nicht immer funktioniert, dort gibt es nämlich den dritten von zwei möglichen Fällen, nennt sich Null.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: array[1..10] auf Wert prüfen?

  Alt 11. Aug 2018, 11:41
Und wer mal mit Datenbanken arbeitet und .AsBoolean benutzt weiß, dass das nicht immer funktioniert, dort gibt es nämlich den dritten von zwei möglichen Fällen, nennt sich Null.


Ich habe den Eindruck, das diese "irgendeinbool=true-Diskussion" immer öfter hochkocht.
Das erinnert mich an "sinnvoll" und "das macht Sinn". Nur weil ein Konstrukt in der einen Sprache vorkommt, ist es in der anderen Sprache nicht sinnvoll.


Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#5

AW: array[1..10] auf Wert prüfen?

  Alt 11. Aug 2018, 12:44
Wenn ich höre: Das macht Sinn oder Was für einen Sinn macht es frag' ich mich immer: Was ist das für ein ominöses Es, das nichts weiter tut, als Sinn herstellen. Und vor allem, wie wird Sinn gemacht? Und wie kann Es immer und jederzeit überall sein, um dieser Tätigkeit nachzugehen, ohne dass mir je jemand erklären konnte, wie eigentlich "Sinnmachen" geht. Hat Es auf das "Sinnmachen" ein Patent und wenn ja, wie viel verdient dieses Es dann mit der Vermarktung davon?

Auch wenn man das Englische wörtlich ins Deutsche übersetzen kann, so ist es nicht zwingend sinnvoll oder sinnbringend oder in Falschdeutsch: Das macht keinen Sinn. Man könnte auch einfach sagen: "Sinnmachen" ist unsinnig, "keinen Sinn machen" ebenso.

Genausowenig wie if varibabel = true then .

Frage ja auch nicht ab: if (variabel = 1) and (1 = 1) then oder gar if (variabel = 0) and (1 = 0) then
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: array[1..10] auf Wert prüfen?

  Alt 11. Aug 2018, 17:32
Aus technischer Sicht ist ein Vergleich mit True überflüssig. Für mich macht es allenfalls noch Sinn wenn man etwas damit ausdrücken möchte und so den Code lesbarer machten will.

Wenn True und False eher gleichberechtigt sind würde ich vielleicht ein Vergleich auf True in Betracht ziehen wie z.B.: if UntersuchungsErgebnis = True then

Wenn True eher eine Richtigkeit oder Vollständigkeit anzeigt lasse ich das auf jeden Fall weg wie z.B. bei
if UntersuchungsAbgeschlossen then

In den meisten Fällen die obigen ersten Fall entsprechen würde ich aber eher einen eigenen Aufzählungstyp definieren wie z.B. TUntersuchungsErgebnis = (positiv, negativ); Dann wird gleich auch der Typ immer vom Compiler geprüft.

Obige Unterscheidung kommt bei mir ähnlich häufig bei unit tests vor. So schreibe ich z.B.:
CheckTrue( Assigned(parameter) )
andererseits
CheckEquals(True, Testklasse.UntersuchungsErgebnis);
oder
CheckEquals(False, Testklasse.UntersuchungsErgebnis);
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
491 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: array[1..10] auf Wert prüfen?

  Alt 11. Aug 2018, 22:10
Um nochmal auf das Problem zurückzukommen, ich würde es sogar mit einer for in -Schleife machen, da man hier ja nur lesezugriff braucht. Wäre noch etwas schneller und einfacher:

Delphi-Quellcode:
function AssertArray(AArray: TArray<Boolean>): Boolean;
begin
  for Result in AArray do
  begin
    if not Result then
    begin
      Exit;
    end;
  end;
end;
Das wäre sicherlich die Eleganteste Lösung.
Dennis
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:27 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