Mischen von Strings und numerischen Werten

Anfängerfragen zum Programmieren mit PureBasic.
rolle
Beiträge: 6
Registriert: 03.01.2014 10:52

Mischen von Strings und numerischen Werten

Beitrag von rolle »

Hallo,

ich hatte einen Vertipper im meinen Code und trotzdem lies er sich kompilieren (5.24 LTS x86) und korrekt ausführen. Warum auch immer?

Ich habe das mal aufs nötigste reduziert:

Code: Alles auswählen

string.s =  "string" + 1           ; eigentlich richtig str(1)
debug string
Ausgabe: string1



Tausche ich die Werte, gibts eine Fehlermeldung, die aber inhaltlich auch auf die obige Version paßt.

Code: Alles auswählen

string.s =  1 + "string"
debug string
Compilerfehler: cant mix strings with numerical values.


Ist das ein Bug oder ein Feature? Wobei ich letzteres nicht programmierethisch nachvollziehen kann.


Vielen Dank

rolle
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Mischen von Strings und numerischen Werten

Beitrag von ts-soft »

Geschichte PB 5.10 hat geschrieben:- Hinzugefügt: Auto-Casting von numerischen Werten, wenn Strings beteiligt sind - erlaubt das Verketten von Strings und numerischen Konstanten
Feature :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Re: Mischen von Strings und numerischen Werten

Beitrag von Sven »

Code: Alles auswählen

#eins = 1
#zwei = 2
string.s =  "text" + #eins + #zwei  ;Witzig!
Debug string
Debug #eins + #zwei
Scheint tatsächlich gewollt zu sein.

Ich weiß zwar noch nicht, wo ich das gebrauchen könnte, aber vielleicht fällt mir noch was ein...
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Mischen von Strings und numerischen Werten

Beitrag von Nino »

ts-soft hat geschrieben:
Geschichte PB 5.10 hat geschrieben:- Hinzugefügt: Auto-Casting von numerischen Werten, wenn Strings beteiligt sind - erlaubt das Verketten von Strings und numerischen Konstanten
Feature :wink:
Ja, und um die Frage komplett zu beantworten:
Das funktioniert so nur (gewollt, kein Bug), wenn die "Kette" mit einem String beginnt.
rolle
Beiträge: 6
Registriert: 03.01.2014 10:52

Re: Mischen von Strings und numerischen Werten

Beitrag von rolle »

Vielen Dank, nun weiß ich bescheid.
Ich werde mir das aber gar nicht erst angewöhnen. Das gibt bestimmt nur Ärger in anderen Sprachen.


rolle

ps: Das ist wirklich ein super umfangreiches Forum mit fähigen Leuten! :allright:
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Mischen von Strings und numerischen Werten

Beitrag von Derren »

Sven hat geschrieben:Ich weiß zwar noch nicht, wo ich das gebrauchen könnte, aber vielleicht fällt mir noch was ein...

Code: Alles auswählen

a = 79
Debug "a = " + a  ;schön, einfach, übersichtlich wie man es von vielen anderne Sprachen gewohnt ist
;Debug "a = " + Str(a) ; Str nun obsolet

error = 6858
MessageRequester("Fehler", "Es ist ein Fehler aufgetreten."+#CRLF$+"ErrorCode: "+ error)
;usw...
Signatur und so
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Re: Mischen von Strings und numerischen Werten

Beitrag von Sven »

Derren hat geschrieben:

Code: Alles auswählen

a = 79
Debug "a = " + a  ;schön, einfach, übersichtlich wie man es von vielen anderne Sprachen gewohnt ist
...
Überzeugt mich jetzt nicht so. Ich weiß doch, welche Konstante ich zuweise.

Aber jetzt wird es interessant:

Code: Alles auswählen

If ElapsedMilliseconds() < 1000
  error = 6858
Else
  error = ElapsedMilliseconds()
EndIf

MessageRequester("Fehler", "Es ist ein Fehler aufgetreten." + #CRLF$ + "ErrorCode: " + error)

Debug "Time " + ElapsedMilliseconds()
Es funktioniert auch mit Variablen. Und zwar nicht nur mit "konstanten Variablen", sondern mit beim Compilieren noch unbekannten Variablen.

Denn wielange ich brauche um den Requester zu bestätigen kann der Compiler kaum vorhersagen.
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Mischen von Strings und numerischen Werten

Beitrag von Derren »

Sven hat geschrieben:
Derren hat geschrieben:

Code: Alles auswählen

a = 79
Debug "a = " + a  ;schön, einfach, übersichtlich wie man es von vielen anderne Sprachen gewohnt ist
...
Überzeugt mich jetzt nicht so. Ich weiß doch, welche Konstante ich zuweise.
Es funktioniert auch mit Variablen. Und zwar nicht nur mit "konstanten Variablen", sondern mit beim Compilieren noch unbekannten Variablen.

Denn wielange ich brauche um den Requester zu bestätigen kann der Compiler kaum vorhersagen.
Hä?

Beim Kompilieren sind alle Variablen "unbekannt". Das da oben ist auch ne Variable. Also gut entdeckt ;)

Und dein Code ging vorher auch. Mit Str(), eben. Das brauchst du jetzt nicht. Das ist der einzige Vorteil. Aber ich dachte das überzeugt dich nicht?

Ja, es funktioniert sogar mit Floats.

Vielleicht überzeugt es dich jetzt ;)

Code: Alles auswählen

a.d = 1.0/5
Debug "a= " + Str(a)
Debug "a= " + a
Oh, Sorry. Du weißt ja, welche Variablen du zuweist. Fehler bei der Debuggerausgabe sind also ausgeschlossen, da du jederzeit den Überblick hast ob du Str(), StrF() oder StrD() verwenden musst :)
Signatur und so
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Re: Mischen von Strings und numerischen Werten

Beitrag von Sven »

Derren hat geschrieben:

Code: Alles auswählen

a = 79
Debug "a = " + a
Beim Kompilieren sind alle Variablen "unbekannt". Das da oben ist auch ne Variable. Also gut entdeckt ;)
Ein einigermaßen intelligenter Compiler kann durchaus erkennen, daß a hier nie verändert wird, und die 79 gleich als Konstante hinter den String setzen. Damit wäre keine Variable beteiligt.

Deswegen mein Test mit den garantiert nicht konstanten Werten aus den Millisec. Denn auch sowas:

a = 5
b = 7
c = a * b
Debug "c = " + c

könnte der Compiler direkt als

Debug "c = 35" compilieren.
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Mischen von Strings und numerischen Werten

Beitrag von Derren »

Fair enough :allright:
Signatur und so
Antworten