AGB  ·  Datenschutz  ·  Impressum  







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

Case Frage

Ein Thema von Nicodius · begonnen am 9. Jun 2004 · letzter Beitrag vom 24. Okt 2006
Antwort Antwort
Seite 1 von 2  1 2      
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#1

Case Frage

  Alt 9. Jun 2004, 18:45
Nur mal ne grundlegende Frage zu Delphi


Warum haben es die Delphiprogrammierer in eienr case struktur ausgeschlossen das case aus nem string zu bilden?

ich meine: das ist doch/ wäre dochmanchmal sehr praktisch.

mfg

Nicodius
Nico Müller
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Case Frage

  Alt 9. Jun 2004, 18:50
Sie haben es nicht ausgeschlossen. Es ist nicht möglich, da case nur mit ordinal Werten arbeitet.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Case Frage

  Alt 9. Jun 2004, 18:59
Ich glaub er meint, warum case nur mit ordinaltypen arbeitet! Warum also Borland das so gebaut hat´?
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#4

Re: Case Frage

  Alt 9. Jun 2004, 19:01
öhm so verständnishalber mal ne kleine Beschreibung, was "ordinal" bedeutet, dann is das eigentlich klar

Zitat:
Die "case"-Anweisung benötigt eine Variable von ordinalem Typ. Ordinale Typen sind abzählbare Typen. Abzählbar sind zB alle Integer-Typen, der Typ char etc.
mfg
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#5

Re: Case Frage

  Alt 9. Jun 2004, 19:01
genau

sorry wegen falscher formulierung


was ordinal heißt das weiß ich aber geerell würde eine casestruktur genauso gut mit strings funktionieren

da ZEICHEN K E T T E N also mehrere chars das hätten die leicht einbauen können
Nico Müller
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Case Frage

  Alt 9. Jun 2004, 19:11
case kann grundsätzlich nur konstante Ordinalwerte benutzen. Und der Grund wird klar, wenn man sich den erzeugten Code ansieht:

Delphi-Quellcode:
var
  i: Integer;
begin
  i := 1;
  case i of
    2: ShowMessage('2');
    3: ShowMessage('3');
  else
    ShowMessage('nix davon');
  end;
end;
Das erzeugt den im Anhang gezeigten Code. Da sieht man sehr schön, wie raffiniert der Compiler vorgeht: Er schreibt zunächst unser i in das Register EAX. Dann zieht er 2 davon ab. Nun prüft er, ob EAX gleich 0 ist, was der Fall gewesen wäre, wenn i=2 wäre. Nun zieht er noch eins und prüft wieder auf 0 (entspricht case 3). Ist bis hierher immer noch kein Sprung erfolgt, kommt ein unbedingter Sprung zur Anzeige von 'nix davon'.
Mit nicht konstanten Werten (geschweige denn mit Strings) wäre solch optimiertes Verhalten nicht möglich.
Und soweit ich weiß, machen das andere Sprachen wie C(++) oder Java auch nicht anders.
Miniaturansicht angehängter Grafiken
casedump.jpg  
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Case Frage

  Alt 9. Jun 2004, 19:15
warum zieht er was ab?
Nico Müller
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Case Frage

  Alt 9. Jun 2004, 19:17
Lies, was Chewie schreibt:
Zitat:
Er schreibt zunächst unser i in das Register EAX. Dann zieht er 2 davon ab. Nun prüft er, ob EAX gleich 0 ist, was der Fall gewesen wäre, wenn i=2 wäre.
Um festzustellen ob ein case-Zweig zutrifft.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Case Frage

  Alt 9. Jun 2004, 19:18
Er prüft zunächst, ob i=2 ist. Dann prüft er, ob i=3 ist.
Wir schreiben nun unser i in EAX. Davon ziehen wir 2 ab. War i=2, steht jetzt eine 0 in EAX. War i<>2, könnte es 3 gewesen sein. Deshalb ziehen wir nochmal eins ab. War i=3, steht jetzt eine 0 drin. Sonst behandeln wir unseren else-Fall.
Jetzt verstanden?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#10

Re: Case Frage

  Alt 9. Jun 2004, 19:18
aha .. aber was ist daran so rafiniert


wie soll er es denn sonst machen?

.. naja um wieder OT zu werden: er kann so ja auch prüfen ob eine charKETTE vorhanden ist
Nico Müller
  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 18:18 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