Schön, dass Sie da sind!

PlusPedia wird derzeit technisch modernisiert. Wie alles, was bei laufendem Betrieb bearbeitet wird, kann es auch hier zu zeitweisen Ausfällen bestimmter Funktionen kommen. Es sind aber alle Artikel zugänglich, Sie können PlusPedia genauso nutzen wie immer.

Bei PlusPedia sind Sie sicher: – Wir verarbeiten keine personenbezogenen Daten, erlauben umfassend anonyme Mitarbeit und erfüllen die Datenschutz-Grundverordnung (DSGVO) vollumfänglich. Es haftet der Vorsitzende des Trägervereins.

Bitte beachten: Aktuell können sich keine neuen Benutzer registrieren. Wir beheben das Problem so schnell wie möglich.

PlusPedia blüht wieder auf als freundliches deutsches Lexikon.
Wir haben auf die neue Version 1.43.3 aktualisiert.
Wir haben SSL aktiviert.
Hier geht es zu den aktuellen Aktuelle Ereignissen

Hinweis zur Passwortsicherheit:
Bitte nutzen Sie Ihr PlusPedia-Passwort nur bei PlusPedia.
Wenn Sie Ihr PlusPedia-Passwort andernorts nutzen, ändern Sie es bitte DORT bis unsere Modernisierung abgeschlossen ist.
Überall wo es sensibel, sollte man generell immer unterschiedliche Passworte verwenden! Das gilt hier und im gesamten Internet.
Aus Gründen der Sicherheit (PlusPedia hatte bis 24.07.2025 kein SSL | https://)

Operno: Unterschied zwischen den Versionen

Aus PlusPedia
Zur Navigation springen Zur Suche springen
K Änderungen von 91.49.123.159 (Diskussion) rückgängig gemacht und letzte Version von Administrator Glenn v. B. wiederhergestellt
Pureprogger (Diskussion | Beiträge)
Neue Auflage übernommen
Zeile 1: Zeile 1:
{{Infobox Programmiersprache
{{Infobox Programmiersprache
  | Name = Operno
  | Name = Operno
  | Paradigma = [[porzedural]], [[objektorientiert]], [[funktional]]
  | Paradigma = [[Objektorientierte Programmierung|objektorientiert]], [[Funktionale Programmierung|funktional]], [[Reflexion (Programmierung)|reflexion]]
  | Erscheinungsjahr = 2008
  | Erscheinungsjahr = 2008
  | Entwickler = Josef Sniatecki
  | Entwickler = Josef Sniatecki
  | AktuelleVersion = 5.40
  | AktuelleVersion = 5.40
  | AktuelleVersionFreigabeDatum = [[1. Dezember]] [[2009]]
  | AktuelleVersionFreigabeDatum = 1. Dezember 2009
  | Typisierung = [[dynamisch]]
  | Typisierung = [[dynamisch]]
  | Betriebssystem = [[Windows]]
  | Betriebssystem = [[Windows]]
Zeile 12: Zeile 12:
}}
}}


'''Operno''' ist eine objektorientierte, dynamische und funktionale Programmiersprache, die von Josef Sniatecki ([[14. April]] [[1993]]) gegründet wurde und weiterhin erntwickelt wird. Die Sprache wird durch einen Interpreter analysiert und ausgeführt. Zur Analyse gehört die lexikalische Analyse und die Optimierung durch den internen Präprozessor.
'''Operno''' ist eine objektorientierte, dynamische und funktionale Programmiersprache, die von Josef Sniatecki (*14. April 1993) entwickelt wurde und einer stetigen Weiterentwicklung unterliegt. Die Sprache wird durch einen Interpreter analysiert und ausgeführt. Zur Analyse gehört die [[lexikalische Analyse]] und die Optimierung durch einen internen [[Präprozessor]].


Zu den Sprachelementen gehört [[OOP]], zur Laufzeit modifizierbare Klassen, dynamisch erweiterbare Listen (Containerklasse), [[vektorielle Operationen]] für nicht überladene Operatoren, Präprozessor für [[Makros]] und [[Symbole]], Kontrollstrukturen (if, switch, while) und Iterationsschleifen (for, repeat).
Zu den Sprachelementen gehört [[Objektorientierte Programmierung|OOP]], zur Laufzeit modifizierbare Klassen, [[Doppelt verkettete Liste|dynamisch erweiterbare Listen]] (Containerklasse), vektorielle Operationen für nicht überladene Operatoren, Präprozessor für [[Makro|Makros]] und Symbole, [[Kontrollstruktur|Kontrollstrukturen]] (if, switch, while) und Iterationsschleifen (for, repeat).


Zur Zeit besizt Operno eine deutsche Dokumentation, eine integrierte Entwicklungsumgebung und eine interaktive Konsole für die ausführung von eingebenen Anweisungen.
Operno ist ein [[Open source|Open-Source]]-Projekt und steht unter der [[GNU General Public License]]. Derzeit besitzt die Software eine deutsche Dokumentation, eine integrierte [[Entwicklungsumgebung]] und eine interaktive [[Kommandozeile|Konsole]] für die direkte Ausführung von Anweisung.


== Geschichte ==
== Geschichte ==


Die erste Version (1.00) von Operno wurde am [[30. August]] [[2008]] zum ersten Mal publiziert. Der Interpreter zerlegte einen Quellcode in eine Liste von Tokens und hat diese direkt ausgeführt. Die Syntax lehnte sich nach der [[Polnischen Notation]] (Präfixnotation). Somit wurde beispielsweise eine Addition von zwei Zahlen nach dem Schema <code>+: num1, num2</code> ausgeführt.
Die erste Version (1.00) von Operno wurde am 30. August 2008 zum ersten Mal publiziert. Der Interpreter zerlegte einen Quellcode in eine Liste von Tokens und hat diese direkt ausgeführt. Die Syntax lehnte sich nach der [[Polnische Notation|Polnischen Notation]] (Präfixnotation). Somit wurde beispielsweise eine Addition von zwei Zahlen nach dem Schema <code>+: num1, num2</code> ausgeführt.


Am [[27. September]] [[2008]] erschien die Version 2.00. Operno verwendete die [[Infix-Notation]], die Quellcodes wesentlich lesbarer machte. Dabei wurde jede Anweisung durch ein Semikolon beendet. Zudem wurde auch das objektorientierte Sprachparadigma konzipiert, wodurch Funktionen, Gruppen, Klassen und Variablen als Objekte behandelt wurden.
Am 27. September 2008 erschien die Version 2.00. Operno verwendete die [[Infix-Notation]], die Quellcodes wesentlich lesbarer machte. Dabei wurde jede Anweisung durch ein Semikolon beendet. Zudem wurde auch das objektorientierte Sprachparadigma konzipiert, wodurch Funktionen, Gruppen, Klassen und Variablen als Objekte behandelt wurden.


Die Version 3.00 wurde am [[24. Dezember]] [[2008]] veröffentlicht und hat das funkionale Programmieren verbessert, indem Kontrollstrukturen Werte zurück geben konnten. Änderungen bezüglich zur Syntax gab es kaum.
Die Version 3.00 wurde am 24. Dezember 2008 veröffentlicht und hat das funkionale Programmieren verbessert, indem Kontrollstrukturen Werte zurück geben konnten. Änderungen bezüglich zur Syntax gab es kaum.


Operno 4.00 wurde nie publiziert, da die Programmstruktur dieser Version nicht genug zum erweitern geeignet war. Kurz darauf wurde die folgende Version entwickelt:
Operno 4.00 wurde nie publiziert, da die Programmstruktur dieser Version nicht genug zum erweitern geeignet war. Kurz darauf wurde die folgende Version entwickelt:


Die aktuelle Hauptversion 5.00 wurde am [[3. April]] [[2009]] veröffentlicht und unterstützt nun alle weiteren Paradigmen, die schon erwähnt wurden. Die aktuelle Nebenversion ist 5.40.
Die aktuelle Hauptversion 5.00 wurde am 3. April 2009 veröffentlicht und unterstützt nun alle weiteren Paradigmen, die schon erwähnt wurden. Die aktuelle Nebenversion ist 5.40.


== Objekte ==
== Objekte ==
Zeile 37: Zeile 37:
* Gruppe
* Gruppe


Jedes Objekt wird erst zur Laufzeit definiert, wodurch Objekte löschbar und wieder neu definierbar sind. Dabei kann auch ein Projekt, dass Operno als [[Dynamic Link Library]] verwendet, auf Attribute (z. B. der Name) von Objekten zugreifen und diese überschreiben.
Objekte werden in Operno zur Laufzeit definiert, wodurch Objekte löschbar und wieder neu definierbar sind. Dabei kann auch ein Projekt, dass Operno als [[Dynamic Link Library]] verwendet, auf Attribute (z.B. der Name) von Objekten zugreifen und diese überschreiben.


== Variable ==
== Variable ==
Eine Variable kann jeden klassifizierten Wert speichern und diesen zur Laufzeit wiederverwenden und modifizieren. Klassenmethoden und [[Instanz (Informatik)|Instanzen]] (ebenso Objekte) können mittels einer Variable aufgerufen werden. Die [[Typisierung]] erfolgt zur Laufzeit, wodurch man von einer [[Dynamische Typisierung|dynamischen Typisierung]] spricht.
Eine Variable kann jeden klassifizierten Wert speichern und diesen zur Laufzeit wiederverwenden und modifizieren. Die Klasse des Wertes kann über Methoden verfügen, die durch die jeweilige Variable aufgerufen werden können. Ähnlich wie in [[Ruby (Programmiersprache)|Ruby]], unterscheidet Operno nicht zwischen den Klassen von Werten, sondern zwischen den dazugehörigen Methoden. Die [[Typisierung (Informatik)|Typisierung]] erfolgt zur Laufzeit, wodurch man von einer [[Dynamische Typisierung|dynamischen Typisierung]] spricht.


=== Variants ===
=== Variants ===
Eine Variable kann von der Klasse <code>[[Variant (Datentyp)|variant]]</code> sein. Dies ist eine unbestimmte Klasse, wodurch eine Variable vom Typ <code>variant</code> jeden Wert zugewiesen bekommen kann, ohne ein [[Typenumwandlung|Type-Casting]] vorzunehmen.
Eine Variable kann von der Klasse <code>[[Variant (Datentyp)|variant]]</code> sein. Dies ist eine unbestimmte Klasse, wodurch eine Variable vom Typ <code>variant</code> jeden Wert zugewiesen bekommen kann, ohne ein [[Typumwandlung|Type-Casting]] vorzunehmen.


Im folgenden Beispiel sind beide Parameter/Variablen <code>a</code> und <code>b</code> vom Typ <code>variant</code>, da keine Klassen angegeben werden:
Im folgenden Beispiel sind beide Parameter/Variablen <code>a</code> und <code>b</code> vom Typ <code>variant</code>, da keine Klassen angegeben werden:
Zeile 51: Zeile 51:
}
}


out sum(10, 1)     'Gibt "11" aus
out sum(10, 1) 'Gibt "11" aus
out sum("A", "BC") 'Gibt "ABC" aus
out sum("A", "BC") 'Gibt "ABC" aus
</pre>
</pre>
Zeile 69: Zeile 69:


put hello world 'Gibt "Hello world!" aus
put hello world 'Gibt "Hello world!" aus
out sum(1, 10) 'Gibt 11 aus
out sum(1, 10) 'Gibt 11 aus
</pre>
</pre>


Zeile 98: Zeile 98:
</pre>
</pre>


=== Multi-Call ===
=== Multi-Calling ===


Ein sog. Multi-Call ist ein mehrfacher Aufruf durch das Aneinanderhängen von mehreren Parameterlisten. Die Ergebnisse dieser Aufrufe werden mittels einer Liste/Queue übergeben:
Das sog. Multi-Calling ist ein mehrfacher Aufruf durch das Aneinanderhängen von mehreren Parameterlisten. Die Ergebnisse dieser Aufrufe werden mittels einer Liste übergeben:
<pre>
<pre>
sum(a, b) = a + b
sum(a, b) = a + b
Zeile 108: Zeile 108:


== Gruppe ==
== Gruppe ==
Eine Gruppe besitzt mehrere Kindobjekte (engl. child objects), die ebenso eine Gruppe sein können, wodurch Verschachtelungen möglich sind. Zugelich können Gruppen auch Klassen sein, indem sie Klassenmethoden (Funktionen) besitzen und bei einer Deklaration einer Variable als Typ/Klasse angegeben werden.
Eine Gruppe besitzt mehrere Kindobjekte (engl. child objects), die ebenso jeden Typ eines Objekts annehmen können. In Operno werden Klassen durch Gruppen konstruiert, indem die Kindobjekte einer Gruppe auch als Klassenmethoden verwendbar sind.


Gruppen von Operno sind nicht mit Namensräumen zu vergleichen, da diese Gruppen auch zur Laufzeit bestehen und als Objekte interpretiert werden.
Diese Gruppen lassen sich mit [[Namensraum|Namensräumen]] vergleichen, wobei zu beachten ist, dass Gruppen in Operno zur Laufzeit bestehen, für vektorielle Operationen verwendet werden dürfen und auch als Klassen verwendet werden.


Die Unterobjekte können durch einen zur Laufzeit ausgewerteten [[String]] angesprochen werden, ähnlich wie bei [[JavaScript]].
Die Unterobjekte können auch durch einen zur Laufzeit ausgewerteten [[Zeichenkette|String]] angesprochen werden - ähnlich wie bei [[JavaScript]].


== Syntax ==
== Syntax ==


Die Syntax basiert auf der gewöhnlichen Infix-Notation. Anweisungen werden immer mit einem Zeilenumbruch, oder einem Semikolon beendet. Zusätzlich kann man durch Operatoren und weiteren Symbolen am Zeilenende eine Zeilenverbindung erzwingen.
Die Syntax basiert auf der Infix-Notation. Anweisungen werden immer mit einem Zeilenumbruch, oder einem Semikolon beendet. Zusätzlich kann man durch Operatoren und sonstigen Symbolen am Zeilenende eine Zeilenverbindung erzwingen.


Beispiel:
Beispiel:
Zeile 124: Zeile 124:
</pre>
</pre>


Schlüsselwörter und Zeichen besitzen oftmals Symbole. Beispielsweise kann man eine Typisierung durch einen Punkt, oder durch ein <code>as</code> angeben.  
Schlüsselwörter und Zeichen besitzen oftmals Symbole. Beispielsweise kann man eine Typisierung durch eine Punktnotation, oder durch ein <code>as</code> angeben.


== Namensgebung ==
== Namensgebung ==


Namen von Objekten können Sonderzeichen und Leerzeichen beinhalten. Dabei werden Leerzeichen nach dem Parsen entfernt, indem die Namen in die [[Binnenmajuskel|Lower-Camel-Case]]-Form umgewandelt wird:
Namen von Objekten können Sonderzeichen und Leerzeichen beinhalten. Dabei werden Leerzeichen nach dem Parsen entfernt, indem die Namen in die [[Binnenmajuskel|Lower-Camel-Case]]-Form umgewandelt werden:
<pre>
<pre>
'Zwei gleiche Variablen mit Sonderzeichen:
'Zwei gleiche Variablen mit Sonderzeichen:
Zeile 137: Zeile 137:
== Funktionales Programmieren ==
== Funktionales Programmieren ==


Die Kontrollstrukturen <code>if</code> und <code>switch</code> können ebenso wie die Iterationsschleifen <code>for</code> und <code>repeat</code> Werte zurückgeben. Somit können diese Skriptsteuerungen innerhalb einer auszuwertenden Anweisung einbauen, um somit die Auswertung variabler aufzustellen.
Die Kontrollstrukturen <code>if</code> und <code>switch</code> können ebenso wie die Iterationsschleifen <code>for</code> und <code>repeat</code> Werte zurückgeben. Somit können diese Skriptsteuerungen innerhalb einer Anweisung Ergebnisse zurückliefern.


Beispiel (<code>x</code> bekommt einen Wert von <code>if</code> zugewiesen):
Beispiel (<code>x</code> bekommt einen Wert von der Kontrollstruktur <code>if</code> zugewiesen):
<pre>
<pre>
b = 1
b = 1
Zeile 153: Zeile 153:
== Objektorieniertes Programmieren ==
== Objektorieniertes Programmieren ==


Jeder Wert besitzt in Operno eine Klasse, die Instanzen und Klassenmethoden besitzt. Instanzen können durch ein Backslash ("\") angesprochen und Klassenmethoden durch einen Doppelpunkt aufgerufen werden. Zusätzlich besitzt jede Klasse Methoden, die automatisch zu bestimmten Ereignissen (z. B. der Konstruktor) aufgerufen werden.
Jeder Wert besitzt in Operno eine Klasse, die Instanzen und Klassenmethoden besitzt. Instanzen können durch ein Backslash ("\") angesprochen und Klassenmethoden durch einen Doppelpunkt aufgerufen werden. Zusätzlich besitzt jede Klasse Methoden, die automatisch zu bestimmten Ereignissen (z.B. der Konstruktor) aufgerufen werden.


Beispiel:
Beispiel:
Zeile 166: Zeile 166:
   _form(){
   _form(){
     return "name: #(name)
     return "name: #(name)
             age: #(age)"
             age: #(age)"
   }
   }
}
}
Zeile 172: Zeile 172:
myself.person("Josef", 16)
myself.person("Josef", 16)
out myself 'Gibt "name: Josef
out myself 'Gibt "name: Josef
           '     age: 16" aus
           ' age: 16" aus


out "Hello world":u case 'Ergibt "HELLO WORLD"
out "Hello world":u case 'Ergibt "HELLO WORLD"
Zeile 179: Zeile 179:
== [[Präprozessor]] ==
== [[Präprozessor]] ==


Da Operno einen rekursiven [[Parser]] besitzt, kann vor der Ausführung der Präprozessor Anweisungen verarbeiten, um einen Code zu optimieren. Somit ist z. B. Ein Makro eine Funktion, die Zeichenketten erhält und einen Code als [[Zeichenkette]] zurückgibt. Neben Makros können auch Symbole definiert werden.
Da Operno einen [[Rekursion|rekursiven]] [[Parser]] besitzt, kann vor der Ausführung der Präprozessor Anweisungen verarbeiten, um einen Code zu optimieren. Somit ist z.B. Ein Makro eine Funktion, die Zeichenketten erhält und einen Code als [[Zeichenkette]] zurückgibt. Neben Makros können auch Symbole definiert werden.


Der Präprozessor interpretiert auch Kontrollstrukturen, wodurch zwischen Code-Abschnitten vor der Ausführung gewählt werden kann.
Der Präprozessor interpretiert auch Kontrollstrukturen, wodurch zwischen Code-Abschnitten vor der Ausführung gewählt werden kann.


== Quellen ==
== Quellen ==
* [[https://sourceforge.net/apps/mediawiki/operno/index.php?title=Main_Page]]
* [https://sourceforge.net/apps/mediawiki/operno/index.php?title=Main_Page Operno] auf [[SourceForge]] (deutsch)
* Dieser Beitrag wurde vom Entwickler selbst erstellt


== Weblinks ==
== Weblinks ==
* [http://josef-s.npage.de/] Homepage des Entwicklers
* [http://josef-s.npage.de/ Homepage des Entwicklers Josef Sniatecki] (deutsch)
* [https://sourceforge.net/projects/operno/] Projekt-Seite auf SourceForge
* [https://sourceforge.net/projects/operno/ Projekt-Seite auf SourceForge] (engl.)


[[Kategorie:Software]]
[[Kategorie:Software]]

Version vom 8. Januar 2010, 21:46 Uhr

Operno
Paradigmen: objektorientiert, funktional, reflexion
Erscheinungsjahr: 2008
Entwickler: Josef Sniatecki
Aktuelle Version: 5.40  (1. Dezember 2009)
Typisierung: dynamisch
Beeinflusst von: Python, JavaScript, Ruby
Betriebssystem: Windows
Lizenz: GPL

Operno ist eine objektorientierte, dynamische und funktionale Programmiersprache, die von Josef Sniatecki (*14. April 1993) entwickelt wurde und einer stetigen Weiterentwicklung unterliegt. Die Sprache wird durch einen Interpreter analysiert und ausgeführt. Zur Analyse gehört die lexikalische Analyse und die Optimierung durch einen internen Präprozessor.

Zu den Sprachelementen gehört OOP, zur Laufzeit modifizierbare Klassen, dynamisch erweiterbare Listen (Containerklasse), vektorielle Operationen für nicht überladene Operatoren, Präprozessor für Makros und Symbole, Kontrollstrukturen (if, switch, while) und Iterationsschleifen (for, repeat).

Operno ist ein Open-Source-Projekt und steht unter der GNU General Public License. Derzeit besitzt die Software eine deutsche Dokumentation, eine integrierte Entwicklungsumgebung und eine interaktive Konsole für die direkte Ausführung von Anweisung.

Geschichte

Die erste Version (1.00) von Operno wurde am 30. August 2008 zum ersten Mal publiziert. Der Interpreter zerlegte einen Quellcode in eine Liste von Tokens und hat diese direkt ausgeführt. Die Syntax lehnte sich nach der Polnischen Notation (Präfixnotation). Somit wurde beispielsweise eine Addition von zwei Zahlen nach dem Schema +: num1, num2 ausgeführt.

Am 27. September 2008 erschien die Version 2.00. Operno verwendete die Infix-Notation, die Quellcodes wesentlich lesbarer machte. Dabei wurde jede Anweisung durch ein Semikolon beendet. Zudem wurde auch das objektorientierte Sprachparadigma konzipiert, wodurch Funktionen, Gruppen, Klassen und Variablen als Objekte behandelt wurden.

Die Version 3.00 wurde am 24. Dezember 2008 veröffentlicht und hat das funkionale Programmieren verbessert, indem Kontrollstrukturen Werte zurück geben konnten. Änderungen bezüglich zur Syntax gab es kaum.

Operno 4.00 wurde nie publiziert, da die Programmstruktur dieser Version nicht genug zum erweitern geeignet war. Kurz darauf wurde die folgende Version entwickelt:

Die aktuelle Hauptversion 5.00 wurde am 3. April 2009 veröffentlicht und unterstützt nun alle weiteren Paradigmen, die schon erwähnt wurden. Die aktuelle Nebenversion ist 5.40.

Objekte

Jedes Objekt kann eines von drei Typen annehmen:

  • Variable
  • Funktion
  • Gruppe

Objekte werden in Operno zur Laufzeit definiert, wodurch Objekte löschbar und wieder neu definierbar sind. Dabei kann auch ein Projekt, dass Operno als Dynamic Link Library verwendet, auf Attribute (z.B. der Name) von Objekten zugreifen und diese überschreiben.

Variable

Eine Variable kann jeden klassifizierten Wert speichern und diesen zur Laufzeit wiederverwenden und modifizieren. Die Klasse des Wertes kann über Methoden verfügen, die durch die jeweilige Variable aufgerufen werden können. Ähnlich wie in Ruby, unterscheidet Operno nicht zwischen den Klassen von Werten, sondern zwischen den dazugehörigen Methoden. Die Typisierung erfolgt zur Laufzeit, wodurch man von einer dynamischen Typisierung spricht.

Variants

Eine Variable kann von der Klasse variant sein. Dies ist eine unbestimmte Klasse, wodurch eine Variable vom Typ variant jeden Wert zugewiesen bekommen kann, ohne ein Type-Casting vorzunehmen.

Im folgenden Beispiel sind beide Parameter/Variablen a und b vom Typ variant, da keine Klassen angegeben werden:

sum(a, b){
  return a + b
}

out sum(10, 1) 'Gibt "11" aus
out sum("A", "BC") 'Gibt "ABC" aus

Funktion

Funktionen können in Operno mehrere Parameter erhalten und diese durch einen Block von Anweisungen verarbeiten. Der Rückgabewert kann in seiner Klasse bestimmt und auch unbestimmt sein.

Aufruf

Der Aufruf einer Funktion erfolgt durch das Erwähnen des Funktionsnamens. Werden Parameter verlangt, so gibt man eine Klammer mit Parametern nach dem Funktionsaufruf an:

put hello world(){
  out "Hello world!"
}

sum(a, b) = a + b

put hello world 'Gibt "Hello world!" aus
out sum(1, 10) 'Gibt 11 aus

Currying

Wird keine Parameterliste beim Aufruf angegeben, trotz dem Verlangen von Parametern, so werden überflüssige Parameter der aktuellen Funktion weitergegeben:

put two values(a, b){
  out a
  out b
}
put four values(){
  put two values 'Die ersten zwei Parameter weitergeben
  out "--"
  put two values 'Die letzten zwei Parameter weitergeben
}

put four values(1, 2, 3, 4)

Die Ausgabe:

1
2
--
3
4

Multi-Calling

Das sog. Multi-Calling ist ein mehrfacher Aufruf durch das Aneinanderhängen von mehreren Parameterlisten. Die Ergebnisse dieser Aufrufe werden mittels einer Liste übergeben:

sum(a, b) = a + b

out sum(1, 2)(8, 2)("A", "BC") 'Gibt "[3, 10, ABC]" aus

Gruppe

Eine Gruppe besitzt mehrere Kindobjekte (engl. child objects), die ebenso jeden Typ eines Objekts annehmen können. In Operno werden Klassen durch Gruppen konstruiert, indem die Kindobjekte einer Gruppe auch als Klassenmethoden verwendbar sind.

Diese Gruppen lassen sich mit Namensräumen vergleichen, wobei zu beachten ist, dass Gruppen in Operno zur Laufzeit bestehen, für vektorielle Operationen verwendet werden dürfen und auch als Klassen verwendet werden.

Die Unterobjekte können auch durch einen zur Laufzeit ausgewerteten String angesprochen werden - ähnlich wie bei JavaScript.

Syntax

Die Syntax basiert auf der Infix-Notation. Anweisungen werden immer mit einem Zeilenumbruch, oder einem Semikolon beendet. Zusätzlich kann man durch Operatoren und sonstigen Symbolen am Zeilenende eine Zeilenverbindung erzwingen.

Beispiel:

out 5 + 4 + 3 +
        2 + 1

Schlüsselwörter und Zeichen besitzen oftmals Symbole. Beispielsweise kann man eine Typisierung durch eine Punktnotation, oder durch ein as angeben.

Namensgebung

Namen von Objekten können Sonderzeichen und Leerzeichen beinhalten. Dabei werden Leerzeichen nach dem Parsen entfernt, indem die Namen in die Lower-Camel-Case-Form umgewandelt werden:

'Zwei gleiche Variablen mit Sonderzeichen:
meine größe = 1.84
meineGröße += 0.1

Funktionales Programmieren

Die Kontrollstrukturen if und switch können ebenso wie die Iterationsschleifen for und repeat Werte zurückgeben. Somit können diese Skriptsteuerungen innerhalb einer Anweisung Ergebnisse zurückliefern.

Beispiel (x bekommt einen Wert von der Kontrollstruktur if zugewiesen):

b = 1
x = if(b == 0)(
  "zero"
)else if(b == 1)(
  "one"
)else(b == 2)(
  "two"
)

Objektorieniertes Programmieren

Jeder Wert besitzt in Operno eine Klasse, die Instanzen und Klassenmethoden besitzt. Instanzen können durch ein Backslash ("\") angesprochen und Klassenmethoden durch einen Doppelpunkt aufgerufen werden. Zusätzlich besitzt jede Klasse Methoden, die automatisch zu bestimmten Ereignissen (z.B. der Konstruktor) aufgerufen werden.

Beispiel:

person{
  _new(){
    this def name.string, age.integer
  }
  _def(){
    this pop
  }
  _form(){
    return "name: #(name)
            age: #(age)"
  }
}

myself.person("Josef", 16)
out myself 'Gibt "name: Josef
           ' age: 16" aus

out "Hello world":u case 'Ergibt "HELLO WORLD"

Präprozessor

Da Operno einen rekursiven Parser besitzt, kann vor der Ausführung der Präprozessor Anweisungen verarbeiten, um einen Code zu optimieren. Somit ist z.B. Ein Makro eine Funktion, die Zeichenketten erhält und einen Code als Zeichenkette zurückgibt. Neben Makros können auch Symbole definiert werden.

Der Präprozessor interpretiert auch Kontrollstrukturen, wodurch zwischen Code-Abschnitten vor der Ausführung gewählt werden kann.

Quellen

Weblinks