elseif [*Nun Offtropic]

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

elseif [*Nun Offtropic]

Beitrag von Maik81ftl »

Moin bzw. Nabend zusammen.

Habe mal eine Frage zu verzweigten Abfragen, genauergesagt zur If then.

steht hier die Möglichkeit einer elseif abfrage zur verfügung? wenn ja, was muß ich bei fpc im vergleich zu CodeSys beachten? da schreib ich

Code: Alles auswählen

if Bedingung1 then
AWB 1
elseif Bedingung2 then
AWB2
else
AWB3
end;
kann ich so auch mit Lazarus schreiben oder muß ich hier die Schleifen nach Folgendem System verwenden?

Code: Alles auswählen

if Bedingung1 then
AWB1
else
if Bedingung2 then
AWB2
else
AWB3
end;
Gruß und schönen Wochenstart Maik
Zuletzt geändert von Maik81ftl am Mi 5. Okt 2011, 22:12, insgesamt 1-mal geändert.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: elseif

Beitrag von u-boot »

Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: elseif

Beitrag von Maik81ftl »

Dachte ich mir auch schon, das ich mit Pseudocode nicht arbeiten kann. :( naja. denne wohl doch den Umständlichen weg gehen.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: elseif

Beitrag von Socke »

Es geht schon, gehört dann aber nicht zum Sprachumfang und ist eigentlich auch nur ein Workaround.

Code: Alles auswählen

{$MACRO ON}
{$DEFINE elseif:=else if}
//…
if False then
elseif True then
ShowMessage('geht');
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: elseif

Beitrag von u-boot »

hmm eher Gewohnheitssache als "Umstand".
elseif ist gegenüber else if eher kompliziert. else und if sind Sprachbausteine die sowieso genau in diesem Kontext bestehen und so auch für diese Fälle zum einsatz kommen. Wohingegen elseif als neuer Sprachbaustein hinzukommen würde. (Wer will elseif schon lernen, wenn man sowieso das normale else und if schon kann).
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

Benutzeravatar
Maik81SE
Beiträge: 327
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.4 FPC 3.2.2)
CPU-Target: x86-64; avr
Wohnort: Lübeck
Kontaktdaten:

Re: elseif

Beitrag von Maik81SE »

Socke hat geschrieben:Es geht schon, gehört dann aber nicht zum Sprachumfang und ist eigentlich auch nur ein Workaround.

Code: Alles auswählen

{$MACRO ON}
{$DEFINE elseif:=else if}
//…
if False then
elseif True then
ShowMessage('geht');
:D via Macroschalter definieren :?: :!: das ich ein Sehr guter Tipp
u-boot hat geschrieben:hmm eher Gewohnheitssache als "Umstand".
elseif ist gegenüber else if eher kompliziert. else und if sind Sprachbausteine die sowieso genau in diesem Kontext bestehen und so auch für diese Fälle zum einsatz kommen. Wohingegen elseif als neuer Sprachbaustein hinzukommen würde. (Wer will elseif schon lernen, wenn man sowieso das normale else und if schon kann).
elseif ist bei meinem Derzeitig Privaten Projekt sinnvoller als getrennt :D :D

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.4 FPC 3.2.2);

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: elseif

Beitrag von Socke »

Maik81SE hat geschrieben:elseif ist bei meinem Derzeitig Privaten Projekt sinnvoller als getrennt :D :D
Wie mein Beitrag mit dem Makro-Schalter zeigt, gibt es doch effektiv keinen Unterschied, ob "else if" geschrieben wird oder "elseif" zu eben jenem expandiert wird. Ein syntaktischer Unterschied kann also gar nicht vorhanden sein und es gibt ebenso auch keinen Unterschied von Getrenntschreibung einer Sprache zu der Zusammenschreibung einer anderen Sprache.

Warum das eine jetzt sinnvoller sein soll, erschließt mir nicht so ganz; vielleicht kannst du das noch weiter ausführen?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: elseif

Beitrag von Maik81ftl »

Socke hat geschrieben:Wie mein Beitrag mit dem Makro-Schalter zeigt, gibt es doch effektiv keinen Unterschied, ob "else if" geschrieben wird oder "elseif" zu eben jenem expandiert wird. Ein syntaktischer Unterschied kann also gar nicht vorhanden sein und es gibt ebenso auch keinen Unterschied von Getrenntschreibung einer Sprache zu der Zusammenschreibung einer anderen Sprache.

Warum das eine jetzt sinnvoller sein soll, erschließt mir nicht so ganz; vielleicht kannst du das noch weiter ausführen?
Nun socke, klar ist die gerade ein Streitthema, aber bei Selktiven Abfragen, ist die sinfoller, wenn das erst Zeichen immer Konstant bleibt und sich in einer Zeichkette das 2, 3 und ggf. 4 Zechen ändert,

bsp: (r); (c); (tm)

Zioel und Zweck ist es diese Zeichen analog zu OpenOffice automatisch umzwandeln. :D auch wenn's sich nicht groß unterscheidet, liest es sich für mich besser, wenn ich

Code: Alles auswählen

elseif
statt

Code: Alles auswählen

else if
lese. aber ist ja am ende sowieso jedem seine Geschmackssache. :D

Edit

Hier zur besseren erklärung die Codesection, um die es sich handelt.

Code: Alles auswählen

for Count:= 1 to length(Medizin.Text) do
      if (Medizin.Text[count]='(') then
        if (((Medizin.Text[Count+1]='r') or (Medizin.Text[Count+1]='R'))
              and (Medizin.Text[count+2]=')')) then Caption:= '®'
        elseif (((Medizin.Text[Count+1]='c') or (Medizin.Text[Count+1]='C'))
                  and (Medizin.Text[Count+2]=')')) then Caption:= '©'
        elseif (((Medizin.Text[Count+1]='t') or (Medizin.Text[Count+1]='T'))  and
                ((Medizin.Text[Count+2]='m') or (Medizin.Text[Count+2]='M'))) and
                 (Medizin.Text[Count+3]=')') then Caption:='™'
Läuft auch in kleineren Test soweit sehr gut... Nun nur noch dem Programm sagen, das er aus den 3/4 Zeichen eines machen soll.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2842
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: elseif

Beitrag von m.fuchs »

Wenn ich deinen Code und deine Beschreibung richtig interpretiere (was bei dir allerdings nicht gerade einfach ist), dann dürftest du hiermit glücklich werden:

Code: Alles auswählen

Caption := StringsReplace(Medizin.Text, ['(r)', '(c)', '(tm)'], ['®', '©', '™'], [rfReplaceAll, rfIgnoreCase]);
Warum jetzt ein elseif besser als else if sein soll konntest du trotzdem nicht darlegen. Von dem oben genannten Makro halte ich übrigens gar nichts. Damit wird nur eine neue, unnütze und gefährliche Methode etwas zu codieren eingeführt. Unnütz, weil die Einsparung von einem Leerzeichen gar nichts bringt. Gefährlich, weil es für andere Entwickler schwieriger wird sich durch den Code zu lesen. Man muss immer wieder nachschauen was dieser Makrobezeichner macht. Das mag bei einem elseif jetzt nicht unbedingt der Fall sein, aber es könnte ja auch eine völlig neue Sprache geschaffen werden. Also ungefähr so wie du das mit der deutschen Sprache machst. Wie groß dann die Verständnisschwierigkeiten sind, kann wohl jeder nachvollziehen.
0118999881999119725-3

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: elseif

Beitrag von Socke »

m.fuchs hat geschrieben:Wenn ich deinen Code und deine Beschreibung richtig interpretiere (was bei dir allerdings nicht gerade einfach ist), dann dürftest du hiermit glücklich werden:

Code: Alles auswählen

Caption := StringsReplace(Medizin.Text, ['(r)', '(c)', '(tm)'], ['®', '©', '™'], [rfReplaceAll, rfIgnoreCase]);
Diese Variante funktioniert übrigens auch dann noch einwandfrei, wenn in Medizin.Text ein ungültiger Wert enthalten ist. Ungültig wäre in deiner Funktion ein Wert, wenn nach einer öffnenden runden Klammer nicht mindestens zwei Zeichen folgen. Bei dir hättest du schnell eine Zugriffsverletzung (im besten Fall).
m.fuchs hat geschrieben:Warum jetzt ein elseif besser als else if sein soll konntest du trotzdem nicht darlegen.
Es soll leichter lesbar sein. Deine Argumente unten zielen natürlich genau dagegen und zeigen deutlich, dass Lesbarkeit nicht nur Geschmackssache ist, sondern ein Grundvoraussetzung um effizienter zu kommunizieren (oder auch zu produzieren).
m.fuchs hat geschrieben:Von dem oben genannten Makro halte ich übrigens gar nichts. Damit wird nur eine neue, unnütze und gefährliche Methode etwas zu codieren eingeführt. Unnütz, weil die Einsparung von einem Leerzeichen gar nichts bringt. Gefährlich, weil es für andere Entwickler schwieriger wird sich durch den Code zu lesen. Man muss immer wieder nachschauen was dieser Makrobezeichner macht.
Das ist so ziemlich der zweitwichtigste Punkt, der mich an der Sprache C stört. Dort wird für alles ein Makro geschrieben, nur weil man keine ganzen Funktionen in eine Header-Datei hineinschreiben möchte (oder per Konvention nicht tut; technisch wäre es aber möglich).
Dass ich dieses Makro hier hineingestellt habe, heißt auch nur, dass ich die technische Machbarkeit demonstriere. Eine mächtige Programmiersprache zeichnet sich nicht dadurch aus, dass ein mächtiger Präprozessor zum Sprachumfang dazugehört.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: elseif

Beitrag von Maik81ftl »

Socke hat geschrieben:
m.fuchs hat geschrieben:Wenn ich deinen Code und deine Beschreibung richtig interpretiere (was bei dir allerdings nicht gerade einfach ist), dann dürftest du hiermit glücklich werden:

Code: Alles auswählen

Caption := StringsReplace(Medizin.Text, ['(r)', '(c)', '(tm)'], ['®', '©', '™'], [rfReplaceAll, rfIgnoreCase]);
Diese Variante funktioniert übrigens auch dann noch einwandfrei, wenn in Medizin.Text ein ungültiger Wert enthalten ist. Ungültig wäre in deiner Funktion ein Wert, wenn nach einer öffnenden runden Klammer nicht mindestens zwei Zeichen folgen. Bei dir hättest du schnell eine Zugriffsverletzung (im besten Fall).
HIer habt ihr beide bzw du socke mich auf einen ggf. auftauchenden Fehler gelenkt. | ist jetzt mal angenommen ein X-beliebiger char.
Socke hat geschrieben:
m.fuchs hat geschrieben:Warum jetzt ein elseif besser als else if sein soll konntest du trotzdem nicht darlegen.
Es soll leichter lesbar sein. Deine Argumente unten zielen natürlich genau dagegen und zeigen deutlich, dass Lesbarkeit nicht nur Geschmackssache ist, sondern ein Grundvoraussetzung um effizienter zu kommunizieren (oder auch zu produzieren).
Socke! Hier hast du gerade recht. ich will deshalb auf dieses Macro umsteigen, da ich bei CoDeSys auch diesen befehl verwenden kann, darf und/oder muß. Wäre glaube sehr umständlich und Kontraproduktiv, wenn die Externen Mitarbeiter schon mit elseif arbeiten und ich dies Übergehe und was anderes verwende.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: elseif

Beitrag von Socke »

Maik81ftl hat geschrieben:Socke! Hier hast du gerade recht. ich will deshalb auf dieses Macro umsteigen, da ich bei CoDeSys auch diesen befehl verwenden kann, darf und/oder muß. Wäre glaube sehr umständlich und Kontraproduktiv, wenn die Externen Mitarbeiter schon mit elseif arbeiten und ich dies Übergehe und was anderes verwende.
Kompatibilität mit einem anderen Produkt herzustellen ist natürlich ein legitimer Grund, was dann aber ein Argument gegen diese Produkte/-kombination ist :D CoDeSys ist mir überhaupt kein Begriff …
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: elseif

Beitrag von Maik81ftl »

Socke hat geschrieben:
Maik81ftl hat geschrieben:Socke! Hier hast du gerade recht. ich will deshalb auf dieses Macro umsteigen, da ich bei CoDeSys auch diesen befehl verwenden kann, darf und/oder muß. Wäre glaube sehr umständlich und Kontraproduktiv, wenn die Externen Mitarbeiter schon mit elseif arbeiten und ich dies Übergehe und was anderes verwende.
Kompatibilität mit einem anderen Produkt herzustellen ist natürlich ein legitimer Grund, was dann aber ein Argument gegen diese Produkte/-kombination ist :D CoDeSys ist mir überhaupt kein Begriff …
CoDeSys ist eine auf Modula Basierende Programmierumgebung für die SABO-SPS-Systeme, welche ich Programmieren und Optimieren muß. Näheres hier. CoDeSys, SPS Steuerungen oder CoDeSys

EDIT* Da ja die Eigendliche Frage geklärt ist, kann dies nun als Off-Tropic behandelt werden. :D :D :mrgreen:

Hier mal die Function in lauffähiger Art. Ohne Probleme...

Code: Alles auswählen

var count: byte;
begin
  if Key = 13 then begin
    count:= 0;
    repeat
      inc(count);
      if (Medizin.Text[count]='(') then begin
        if (((Medizin.Text[Count+1]='r') or (Medizin.Text[Count+1]='R'))
              and (Medizin.Text[count+2]=')')) then begin
              Meditemp:= Meditemp+('®');
              Inc(count, 2);
              end
        elseif (((Medizin.Text[Count+1]='c') or (Medizin.Text[Count+1]='C'))
                  and (Medizin.Text[Count+2]=')')) then begin
                  Meditemp:= Meditemp+('©');
                  inc(count, 2);
                  end
        elseif (((Medizin.Text[Count+1]='t') or (Medizin.Text[Count+1]='T'))  and
                ((Medizin.Text[Count+2]='m') or (Medizin.Text[Count+2]='M'))) and
                 (Medizin.Text[Count+3]=')') then begin
                  Meditemp:= Meditemp+('™');
                  inc(count, 3);
                 end;
        end
        else Meditemp:= Meditemp+Medizin.Text[Count];
      until Count = length(Medizin.Text);
  Medizin.Text:= Meditemp;
  end;
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2842
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: elseif

Beitrag von m.fuchs »

Maik81ftl hat geschrieben:ich will deshalb auf dieses Macro umsteigen, da ich bei CoDeSys auch diesen befehl verwenden kann, darf und/oder muß. Wäre glaube sehr umständlich und Kontraproduktiv, wenn die Externen Mitarbeiter schon mit elseif arbeiten und ich dies Übergehe und was anderes verwende.
Hm, finde ich sehr seltsam. Wenn ich ein C-Programm korrigieren muss, dann schreib ich ja auch nicht zuerst:

Code: Alles auswählen

#define BEGIN {
#define END }
Solche Makros zu verwenden um Pascal einer anderen Sprache anzupassen klingt jedenfalls nicht nach einer guten Idee in meinen Ohren. Als Entwickler der in einer neuen Sprache arbeiten muss, würde ich dann ein Verzweigungskonstrukt sehen, welches nicht im FPC-Handbuch beschrieben ist. Ganz übel. Nebenbei fehlt dir dann das Syntaxhiglighting.

Und ganz ehrlich: Mehrere Sprachen zu beherrschen sollte eigentlich in der beruflichen Softwareentwicklung problemlos möglich sein. Klar verwechselt man mal was (this und self tausche ich gelegentlich mal in Pascal und PHP hin und her), aber das ist ja auch kein unlösbares Problem.

Ich würde für sowas jedenfalls den Leuten eins auf die Finger geben.
Zuletzt geändert von m.fuchs am Fr 21. Okt 2011, 22:16, insgesamt 1-mal geändert.
0118999881999119725-3

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: elseif [*Nun Offtropic]

Beitrag von Maik81ftl »

Gebe ich dir Bedingt recht m.fuchs. Allerdings ist Modular wenn ich mich nicht Irre eine Pascalart, Habe zugegeben auch bei AVRco diesen Befehl elseif zur Verfügung. Wie das allerdings im Vergleich zu C, Java, php und co. ist, kann ich nicht beurteilen, da ich mich zu nahezu 99% mit Pascal beschäftige.

Das seinen Einwand als des Syntaxhighlighting betrifft, da gebe ich dir 100 Pro recht. Wäre in dem Sinn ein Riesen Vorteil, wenn diese Makro automatisch in den entsprechenden Highlighter Gesetz wird.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Antworten