AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Variablen in Stringliteral inlinen

Ein Thema von QuickAndDirty · begonnen am 5. Feb 2020 · letzter Beitrag vom 11. Feb 2020
Antwort Antwort
Seite 1 von 2  1 2   
freimatz

Registriert seit: 20. Mai 2010
1.501 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Variablen in Stringliteral inlinen

  Alt 6. Feb 2020, 12:51
Menno sogar Swift hat das!
Es wäre so gut wenn die das einbauen.
Cotlin, Dart, Swift und C# 6.0 alle haben es
Es wäre schlecht wenn die das einbauen. Das verleitet zu QuickAndDirty-Code

(Bei uns wurde eh solcher Code von der Person, die für Übersetzungen zuständig ist, verboten.)
  Mit Zitat antworten Zitat
Dennis07

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

AW: Variablen in Stringliteral inlinen

  Alt 6. Feb 2020, 14:51
Könntest dir nen IDE-Plugin dafür bauen, das das im Editor mit nem Rechtsklick oder so parst. Aber ansonsten sehe ich da nicht viel Möglichkeit.
Was jedoch ginge, wäre so etwas für Klassenfelder zu machen, da diese über die RTTI abrufbar sind. Globale oder lokale Variablen/Konstanten allerdings wirst du so nicht verarbeiten können.
Dennis
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.091 Beiträge
 
Delphi 12 Athens
 
#3

AW: Variablen in Stringliteral inlinen

  Alt 6. Feb 2020, 19:33
Menno sogar Swift hat das!
Es wäre so gut wenn die das einbauen.
Cotlin, Dart, Swift und C# 6.0 alle haben es
Es wäre schlecht wenn die das einbauen. Das verleitet zu QuickAndDirty-Code

(Bei uns wurde eh solcher Code von der Person, die für Übersetzungen zuständig ist, verboten.)
Denke ich auch und man müsste sowas evtl. auch öfters mal "escapen"
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.501 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Variablen in Stringliteral inlinen

  Alt 7. Feb 2020, 10:33
Hm, mir kommt gerade eh der Gedanke, dass Texte eigentlich gar nicht in Code gehören.
Bei uns gibt es allenfalls Texte auf englisch die bei Exceptions erscheinen, die der Anweder eh nicht sehen sollte.
  Mit Zitat antworten Zitat
Dennis07

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

AW: Variablen in Stringliteral inlinen

  Alt 7. Feb 2020, 10:43
Hm, mir kommt gerade eh der Gedanke, dass Texte eigentlich gar nicht in Code gehören.
Bei uns gibt es allenfalls Texte auf englisch die bei Exceptions erscheinen, die der Anweder eh nicht sehen sollte.
Davon mal ganz abgesehen
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Variablen in Stringliteral inlinen

  Alt 7. Feb 2020, 11:34
Hm, mir kommt gerade eh der Gedanke, dass Texte eigentlich gar nicht in Code gehören.
Umgekehrt gehört Code (hier Variablennamen) auch nicht in String-Literale.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch
Online

Registriert seit: 11. Aug 2012
Ort: Essen
1.722 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Variablen in Stringliteral inlinen

  Alt 7. Feb 2020, 13:55
Hm, mir kommt gerade eh der Gedanke, dass Texte eigentlich gar nicht in Code gehören.
Umgekehrt gehört Code (hier Variablennamen) auch nicht in String-Literale.
+1

Wobei das eigentlich auch für die Platzhalter in Format-Strings gilt. Wenn der Übersetzer dabei einen Fehler macht, stürzt das Programm ab:

 s := Format(_('Result is %d'), [Res]);
Und der Übersetzer vertippt sich:
'Ergebnis ist %f'

Bumm!
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Variablen in Stringliteral inlinen

  Alt 7. Feb 2020, 14:21
Und der Übersetzer vertippt sich:
'Ergebnis ist %f'
Bumm!
Texte mit Formatierungen aus anderen Quellen sind immer nett, wenn das Programm plötzlich verreckt.
(Übersetzung/Datenbank wo Texte durch user bearbeitet oder über eine Synchronisierung/Update nachgeladen werden)

Drum hab ich bei uns das Format überschrieben/überdeckt.
Der Code muß nur in eine Unit die immer nach den SysUtils eingebunden wird.

Wenigstens "etwas" anzeigen und das Programm nicht abkratzen lassen.
Delphi-Quellcode:
function Format(const FormatStr: string; const Args: array of const): string;
begin
  try
    Result := SysUtils.Format(FormatStr, Args);
  except
    {Meldung ins Log, wenn sowas vorhanden}
    Result := FormatStr; // oder Result := '[ERR] ' + FormatStr;
  end;
end;
Oder zumindestens dem Entwickler etwas helfen, damit man gleich sieht bei welchem "kompletten" String es knallt.
Delphi-Quellcode:
function Format(const FormatStr: string; const Args: array of const): string;
begin
  try
    Result := SysUtils.Format(FormatStr, Args);
  except
    on E: Exception do begin
      E.Message := 'Fehler in Format-String >>' + FormatStr + '<<' + sLineBreak + sLineBreak + E.Message;
      raise;
    end;
  end;
end;
Und das Gleiche für die Variante mit den FormatSettings.

Alternativ verwendet man niemals Format, sondern ruft eine eigene MyFormat auf.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 7. Feb 2020 um 14:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch
Online

Registriert seit: 11. Aug 2012
Ort: Essen
1.722 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Variablen in Stringliteral inlinen

  Alt 7. Feb 2020, 15:30
Texte mit Formatierungen aus anderen Quellen sind immer nett, wenn das Programm plötzlich verreckt.
(Übersetzung/Datenbank wo Texte durch user bearbeitet oder über eine Synchronisierung/Update nachgeladen werden)

Drum hab ich bei uns das Format überschrieben/überdeckt.
Der Code muß nur in eine Unit die immer nach den SysUtils eingebunden wird.

Wenigstens "etwas" anzeigen und das Programm nicht abkratzen lassen.
Wir gehen bei unseren Programmen noch einen Schritt weiter und installieren einen Hook für die Format-Funktion. Das passiert in einer Unit, die automatisch in allen unseren Programmen eingebunden wir. Dann wird sowas auch für fremden Code abgefangen. Und man kann man muss auch nicht daran denken, überall eine solche Unit einzubinden.

Am meisten nervt mich aber, dass man den Datentyp überhaupt angeben muss. Write kann den ja auch automatisch erkennen, warum gibt es bei Format nicht sowas wie einen generischen Platzhalter:

Format('Der Wert ist %g', [IrgendeineVariable]);

Die Format-Funktion weiss ja, welcher Datentyp übergeben wurde, denn eigentlich ist das ja ein Variant mit entsprechenden Informationen. Den kann man dann halt nach String konvertieren. Für viele Anwendungen würde das ausreichen.

Aber das Thema war ja ein anderes ...
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Variablen in Stringliteral inlinen

  Alt 7. Feb 2020, 14:35
Wenn der Übersetzer dabei einen Fehler macht, stürzt das Programm ab
Da braucht er nicht mal einen Fehler machen. Es genügt, wenn er den Satzbau umstellt und sich dadurch die Reihenfolge der Parameter ändert. Deswegen sollte man in solchen Fällen auf die Index-Funktionalität in Format zurückgreifen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 15:43 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