Operatoren (Methoden in Operatorschreibweise)




Stand: 12. September 2011

Operatorschreibweise

Operatoren, wie wir Sie z.B. aus Java kennen, gibt es in Scala nicht. Operatoren sind in Scala ganz normale Methodenaufrufe, welche in der Operatorenschreibweise angegeben werden.

Als Beispiel seihen zwei Int-Variable namens v1 und v2 gegeben. So sind die beiden nachfolgenden Ausdrücke gleichbedeutend:

v1 + v2
v1.+(v2)
                      

Das letzte Beispiel zeigt auch, dass zur Definition von Methodennamen nicht nur Buchstaben, Zahlen und der Unterstrich herangezogen werden können, sondern auch Sonderzeichen wie # \ : ~ zugelassen sind. So ist z.B. folgende Funktionsdefinition in Scala durchaus zulässig:

def #\:~ = 123
                      

Verwenden wir die Operatorschreibweise für den Aufruf von Methoden, müssen wir wissen, auf welchen Operanden die Methode aufgerufen wird und welcher Operand das/die Argument(e) darstellt. In Scala gilt folgende einfache Regel: Endet ein Methodenname mit einem Doppelpunkt, so ist diese Methode rechts gebunden (rechtsassoziativ). Die Methode wird dementsprechend auf den rechten Operanden angewendet. Für alle anderen Methoden gilt, dass diese Links gebunden (linksassoziativ) sind. Ein Beispiel für eine rechtsassoziative Methode ist der cons Operator der Klasse List :: .

Das nachfolgende Beispiel zeigt die Bedeutung einer linksassoziativen Methodenverwendung mithilfe der gleichbedeutenden Punktschreibweise.

v1 ::# v2
v1.::#(v2)
                      

Im nachfolgenden Beispiel wollen wir uns die Bedeutung eines rechtsassoziativen Methodenaufrufs ansehen.

v1 #:: v2
v2.#::(v1)
                      


Priorität

Da wir nun geklärt haben, dass Operatoren in Scala Methodenaufrufe in Operatorschreibweise sind, stellen wir uns die Frage, wie wir die Priorität der Aufrufreihenfolge festlegen. Schließlich soll (und tut es auch) im folgenden Beispiel die Punkt vor Strichregel angewendet werden:

object Op1 {
  def main(args: Array[String]) {
    println(3. + 3. * 2.)
  }  
}
itmapa.de - X2H V 0.18

Der Ablauf des Programmes führt zu folgender Ausgabe auf der Systemausgabe:

9.0
                      

In Scala wird die Priorität der Operatoren (mit einer Ausnahme - siehe unten) über das erste Zeichen des entsprechenden Methodennamens festgelegt. Die nachfolgende Auflistung listet die Priorität der Operatoren je nach Ihrem Anfangszeichen1. Die Priorität nimmt von oben nach unten ab. Zeichen auf einer Ebene haben die gleiche Priorität.

  1. Alle nicht weiter genannte Sonderzeichen
  2. * / %
  3. + -
  4. :
  5. = !
  6. > <
  7. &
  8. ^
  9. |
  10. alle Buchstaben
  11. Zuweisungsoperatoren

Die oben angedeutete Ausnahme bilden Operatoren, deren Methodenname mit einem Gleichheitszeichen '=' endet. Wenn der Methodenname nicht einer der folgenden Bezeichnungen <= >= == != entspricht, so haben die entsprechenden Operatoren die gleiche Prioriät wir der Zuweisungsoperator '='.

______________________________
1 Siehe auch: [40] S. 91, 92