AGB  ·  Datenschutz  ·  Impressum  







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

Der in Operator

Ein Thema von Sherlock · begonnen am 4. Feb 2014 · letzter Beitrag vom 4. Feb 2014
Antwort Antwort
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#1

Der in Operator

  Alt 4. Feb 2014, 10:11
Delphi-Version: XE2
Hi zusammen,
ich wollte gerade ein in verwenden, um ein längliches if zu verkürzen.
Aus:
 if (messwert.WerteDefID = wdPH.No) or (messwert.WerteDefID = wdBE.No) then sollte ein hübsches:
if messwert.WerteDefID in [wdPH.No, wdBE.No] then werden.
Verglichen werden hier allesamt Integer. Es kompiliert auch brav. Nur zur Laufzeit ist das immer false, obwohl ich im Debugger sehe, daß eine Übereinstimmung vorliegt.
Aus diesem SO-Beitrag http://stackoverflow.com/questions/9...operator-usage lese ich heraus, daß das irgendwie nur mit "kleinen" (Byte-) Werten gehen soll, ich habe aber eine Übereinstimmung mit einem Wert von 1743...liegt es daran? Oder mache ich etwas grundsätzlich falsch.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Der in Operator

  Alt 4. Feb 2014, 10:18
Der in-Operator agiert nur mit Sets und Sets sind auf 0..255 beschränkt.

Der Compiler führt beim Aufbau der Sets einen impliziten Cast auf Byte aus. Hast du die Überlaufprüfung aktiv? Die sollte da eigentlich zur Laufzeit anspringen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#3

AW: Der in Operator

  Alt 4. Feb 2014, 10:22
Haha, Danke, genau die Überlaufprüfung ist aus

Schade aber, weil eigentlich könnte man damit reichlich Eleganz und Übersichtlichkeit produzieren. Vielleicht gibt es aber sogar eine Warnung dazu?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Der in Operator

  Alt 4. Feb 2014, 10:40
Was spricht gegen diese elegante Möglichkeit?
Delphi-Quellcode:
  case messwert.WerteDefID of
    wdPH.No,
    wdBE.No :
    begin

    end;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Der in Operator

  Alt 4. Feb 2014, 11:13
Im Grunde brauchst du eine Funktion ala Delphi-Referenz durchsuchenMatchStr (Welche es aber nicht im Delphi gibt ... k.A. warum),
aber eventuell reicht auch Delphi-Referenz durchsuchenInRange.

Delphi-Quellcode:
function MatchInt(AInt: Integer; const AValues: array of Integer): Boolean;

if MatchInt(messwert.WerteDefID, [wdPH.No, wdBE.No]) then
Aber den CASE-Trick verwende ich da auch öfters.


Bei Werten zwischen 0 und 65535 könnte man eventuell auch die Unicode-Funktionen misbrauchen aber in der Unit Character finde ich leider keine passende Funktion.



0..255 => Rate mal, warum IN nicht mehr beim Char (TSysCharSet) geht und Delphi seit 2009 eine Warnung wirft.
$2B or not $2B

Geändert von himitsu ( 4. Feb 2014 um 11:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#6

AW: Der in Operator

  Alt 4. Feb 2014, 11:53
Ja, das case verwende ich jetzt auch.
Auf andere "üble" Tricks will ich lieber im Sinne der Lesbarkeit verzichten

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Der in Operator

  Alt 4. Feb 2014, 13:11
Seit wann nochmal ist case of das neue with ?
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#8

AW: Der in Operator

  Alt 4. Feb 2014, 13:22
Neee, das kannste jetzt aber echt nicht vergleichen!

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  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 00:17 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