Icon-Tutorial, Teil 6: Zeichenbasierte Datentypen, ihre Funtionen und Operatoren

  • Hallo Himbeerfreunde, Linux-Freaks und Himberrfreunde,

    hier kommt der 6. Teil meines momentan 29-teiligen Tutorials zum Erlernen der Programmiersprache Icon.

    Dieses Mal geht es um Zeichenbasierte Datentypen, womit Zeichen (character) und Zeichenketten (strings) zu verstehen sind. Ich stelle die Funktionen vor, die mit diesen beiden Datentypen umgehen, sowie Operatoren für Zeichen und Zeichenketten.

    Ich wünsche Euch viel Spaß und gutes Gelingen!

    Für diejenigen unter Euch, die angefangen haben, sich in die umfangreiche Original-Literatur zu vertiefen, stehe ich natürlich weiterhin für Fragen und Anregungen zur Verfügung.

    Beste Grüße

    Andreas

    RPI_Forum_Icon_Teil6.pdf

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (1. Mai 2014 um 01:04)

  • Icon-Tutorial, Teil 6: Zeichenbasierte Datentypen, ihre Funtionen und Operatoren? Schau mal ob du hier fündig wirst!

  • Hallo zusammen,

    das passt am Besten zu diesem Teil des Icon-Tutorials.

    Wie toggelt (Umschalten zwischen zwei Zuständen) man am besten, wenn der Wert &null beteiligt ist?

    Wir erinnern uns:

    Beim Umschalten zwischen 0 und 1 nimmt man am Besten die Exklusiv-Oder-Verknüpfung:

    Code
    status := ixor(status, 1)

    schaltet von 0 auf 1, von 1 auf 0, immer wieder.


    Aber wie macht man das z.B. beim Umschalten des Status eines Bedienelementes, da ja in Icon nur 1 oder &null ist.

    Ein erster Ansatz ist z.B.:

    Code
    if status = 0 then status = &null else status := 1

    Abgesehen von Fehlermeldungen, wenn status den Wert Nullwert &null annimmt, geht das so nicht.

    Besser, weil funktional, ist:

    Code
    if /status then status := 1 else status := &null

    oder

    Code
    if \status then status := &null else status := 1

    Aber so richtig knackig ist das hier (mehr Icon-Style):

    Code
    (/status := 1) | (\status := &null)

    Hier braucht's kein if, then und else... Aber was passiert hier eigentlich?

    Ich hatte ja schon mal an anderer Stelle geschrieben, dass die beiden Operatoren / und \ sowas wie Icon's Exception-Handling darstellen und so manche Fallunterscheidung ersparen.

    Der Operator / prüft auf den Nullwert &null.

    Der Operator \ prüft auf den Wert ALLES ANDERE ALS &null.

    Der Operator | ist der Alternierungsoperator. Icon ist ja eine Programmiersprache, in der jeder Ausdruck und Code-Zeile möglichst erfolgreich (goal-directed) beendet werden soll. Das heißt, wenn ein Ausdruck erfolglos enden könnte, macht es Sinn, hinter dem Alternierungsoperator | noch einen Ausdruck anzubieten ... und ggf. noch einen ... und noch einen... .

    Von diesem Alternierungsoperator | mache ich oben Gebrauch.

    Links davon steht ein Ausdruck - rechts davon steht ein Ausdruck.

    Der linke Ausdruck prüft auf Übereinstimmung mit dem Nullwert &null. Wenn es übereinstimmt, wird der Variablen status der Wert 1 zugewiesen. Das Angebot mit / hinter dem Alternierungsoperator wird ignoriert.

    Wenn es nicht so war, wird der Ausdruck hinter dem Alternierungsoperator ausgewertet. Da wird auf Übereinstimmung mit allem anderen als dem Nullwert &null geprüft. Wenn es übereinstimmt (und es sollte, weil der Nullwert bereits im linken Ausdruck dabei war), dann wird der Variablen der Nullwert &null zugewiesen.

    Einer der beiden Ausdrücke wird also zutreffend sein und bewirkt ein Umschalten zwischen &null und 1.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!