AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Verständnisfrage: IF (Bedingung1 ODER Bedingung1)

Verständnisfrage: IF (Bedingung1 ODER Bedingung1)

Ein Thema von Jim Carrey · begonnen am 18. Okt 2016 · letzter Beitrag vom 19. Okt 2016
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: Verständnisfrage: IF (Bedingung1 ODER Bedingung1)

  Alt 18. Okt 2016, 16:29
Och, man gewöhnt sich an fast alles.
Dafür muß man in C noch 'ne Klammer um Alles drum machen, was dann auch viele wieder in Delphi nachmachen.
Delphi-Quellcode:
if (...) {
}


if (...) then begin
end;

if ... then begin
end;
Und so mancher macht so viele (unnötige) Klammern, dass man erstmal schauen muß was wo anfängt und aufhört.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#2

AW: Verständnisfrage: IF (Bedingung1 ODER Bedingung1)

  Alt 18. Okt 2016, 16:31
Und so mancher macht so viele (unnötige) Klammern, dass man erstmal schauen muß was wo anfängt und aufhört.
VisualStudio hat da ein schönes Feature, welches die Klammern einfärbt.
Das hat Delphi, wie immer, natürlich nicht, obwohl es hunderte Euros kostet.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Verständnisfrage: IF (Bedingung1 ODER Bedingung1)

  Alt 18. Okt 2016, 16:46
Und so mancher macht so viele (unnötige) Klammern, dass man erstmal schauen muß was wo anfängt und aufhört.
VisualStudio hat da ein schönes Feature, welches die Klammern einfärbt.
Das hat Delphi, wie immer, natürlich nicht, obwohl es hunderte Euros kostet.
Installier dir CnPack. Das rüstet das nach. Funktioniert top und hilft extrem.
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#4

AW: Verständnisfrage: IF (Bedingung1 ODER Bedingung1)

  Alt 18. Okt 2016, 16:57
Das ist zwar jetzt total OffTopic aber...
kann ich mein Delphi irgendwie reparieren und FireMonkey nachinstallieren? Denn ohne den Affen funktioniert CnPck nicht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Verständnisfrage: IF (Bedingung1 ODER Bedingung1)

  Alt 18. Okt 2016, 21:20
Das ist zwar jetzt total OffTopic aber...
kann ich mein Delphi irgendwie reparieren und FireMonkey nachinstallieren? Denn ohne den Affen funktioniert CnPck nicht.
Wir haben cnPack leider installiert und dafür waren keine Tiere nötig. (gibt's in XE eh nicht)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Verständnisfrage: IF (Bedingung1 ODER Bedingung1)

  Alt 19. Okt 2016, 10:24
Ich hab grade im XE einen eigenartigen Fehler gefunden.
Da sucht man sich echt dumm und dusselig danach, wenn das ab und an in einen OnPopup auftritt,
denn die erste Codezeile läuft erfolgreich durch und die Zweite knallt, mit einer wunderschönen Zugriffsverletzung.

Obj.Count=0 und daher löst Obj.Prop[0] eine Exception aus.
Delphi-Quellcode:
xxx.Enabled := (Obj.Count = 1) and (Obj.Prop[0].GetVariant('ein String') = 'xxx');
xxx.Enabled := (Obj.Count = 1) and not Obj.Prop[0].GetVariant('ein Boolean');
Hatte erst geschaut, ob {$BoolEval} ausversehn aktiv ist, aber nee.
Es knallt einfach, wenn ein implizier Cast auftritt, weil trots {$BoolEval off} der Getter ausgeführt wird
und bei einem explizitem VarAsBool oder Boolean-Cast drumrum, passiert das nicht.
Delphi-Quellcode:
xxx.Enabled := (Obj.Count = 1) and not Obj.Prop[0].GetVariant('ein Boolean'); // knallt
xxx.Enabled := (Obj.Count = 1) and not Boolean(Obj.Prop[0].GetVariant('ein Boolean')); // knallt nicht
xxx.Enabled := (Obj.Count = 1) and not VarAsBool(Obj.Prop[0].GetVariant('ein Boolean')); // knallt och ni
Nach Analyse des Codes, seh ich, dass der Compiler nicht den zweiten Paramter in einen Boolean castet und dann einfach nur ein AND macht,
sondern es wird der erste Parameter in einen Variant gecastet und dann das Ganze in VarAnd(variant, variant): boolean reingequetscht.

Tolle Leisung, vom Compiler. :thumbsup:

xxx.Enabled := (Obj.Count = 1) and not VarToBool(Obj.Prop[0].GetVariant('ein Boolean')); // das IMHO Logische
xxx.Enabled := VarAnd(VarFromBool(Obj.Count = 1), VarNot(Obj.Prop[0].GetVariant('ein Boolean'))); // die Idee des Compiler

Code:
// VarAsBool
mov eax,[ebp-$04]
mov eax,[eax+$00000430]
call $0ea6d894  // GetCount
dec eax
jnz $0ea7bc20
xor edx,edx
mov eax,[ebp-$04]
mov eax,[eax+$00000430]
call $0ea6d89c // GetProp
lea ecx,[ebp-$38]
mov edx,$0ea7c150
call $0ea6d98c // GetVariant
lea eax,[ebp-$38]
call $0ea53264  // VarAsBool
test al,al
jz $0ea7bc24
xor edx,edx
jmp $0ea7bc26
mov dl,$01
mov eax,[ebp-$04]
mov eax,[eax+$000004e4]
call $0ea53024  // SetEnabled

// Boolean
mov eax,[ebp-$04]
mov eax,[eax+$00000430]
call $0ea6d894  // GetCount
dec eax
jnz $0ea7bc89
xor edx,edx
mov eax,[ebp-$04]
mov eax,[eax+$00000430]
call $0ea6d89c // GetProp
lea ecx,[ebp-$48]
mov edx,$0ea7c150
call $0ea6d98c // GetVariant
lea eax,[ebp-$48]
call $0ea51668  // VarToBool
test al,al
jz $0ea7bc8d
xor edx,edx
jmp $0ea7bc8f
mov dl,$01
mov eax,[ebp-$04]
mov eax,[eax+$000004e4]
call $0ea53024  // SetEnabled

// implizit
mov eax,[ebp-$04]
mov eax,[eax+$00000430]
call $0ea6d894  // GetCount
dec eax
setz dl
lea eax,[ebp-$58]
call $0ea51680  // VarFromBool
lea eax,[ebp-$58]
push eax
xor edx,edx
mov eax,[ebp-$04]
mov eax,[eax+$00000430]
call $0ea6d89c // GetProp <- hier knallt's dann
lea ecx,[ebp-$68]
mov edx,$0ea7c150
call $0ea6d98c // GetVariant
lea eax,[ebp-$68]
call $0ea516a8  // VarNot
lea edx,[ebp-$68]
pop eax
call $0ea516f0  // VarAnd
lea eax,[ebp-$58]
call $0ea51668  // VarToBool
mov edx,eax
mov eax,[ebp-$04]
mov eax,[eax+$000004e4]
call $0ea53024  // SetEnabled
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#7

AW: Verständnisfrage: IF (Bedingung1 ODER Bedingung1)

  Alt 19. Okt 2016, 10:27
Delphi-Quellcode:
xxx.Enabled := (Obj.Count = 1) and not VarToBool(Obj.Prop[0].GetVariant('ein Boolean')); // das IMHO Logische
//
Ich kenne es nur so
Delphi-Quellcode:
xxx.Enabled := (Obj.Count = 1) and (not VarToBool(Obj.Prop[0].GetVariant('ein Boolean')));
//
Aber hier sieht man mal wie schön der Compiler alles umänert.
Delphi-Quellcode:
xxx.Enabled := VarAnd(VarFromBool(Obj.Count = 1), VarNot(Obj.Prop[0].GetVariant('ein Boolean'))); // die Idee des Compiler
//
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: Verständnisfrage: IF (Bedingung1 ODER Bedingung1)

  Alt 18. Okt 2016, 16:41
Och, man gewöhnt sich an fast alles.
Dafür muß man in C noch 'ne Klammer um Alles drum machen, was dann auch viele wieder in Delphi nachmachen.
Delphi-Quellcode:
if (...) {
}


if (...) then begin
end;

if ... then begin
end;
Und so mancher macht so viele (unnötige) Klammern, dass man erstmal schauen muß was wo anfängt und aufhört.
Naja, ich glaube da scheiden sich die Geister. Ich persönlich finde die Klammern {..} bei C usw. einfacher zu lesen als bei Delphi das begin...end, einfach weil es sich optisch viel besser vom restlichen Code abhebt. Rein vom tippen ist begin..end allerdings wiederum einfacher, weil vor allem auf deutschen Tastaturen das Eingeben von {} jedesmal ein Krampf ist.

Und ich gehöre auch zu denen, die bei if .. then lieber gleich ein begin..end anhängen, weil es sich so leichter erweitern lässt. Macht man überall nur ein
if .. then
machwas
else
machwasanderes;
und will noch eine zweite Anweisung innerhalb des if-Blockes anhängen, produziert man entweder einen Logikfehler, wenn das begin..end fehlt oder muss es auch wieder ergänzen.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:20 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