Sto modellando un linguaggio di programmazione per divertimento, e la sintassi è strongmente influenzata da Scala - in particolare le definizioni di funzione.
Ho riscontrato un problema di progettazione perché la mia lingua non distingue tra funzioni definite tramite la sintassi def
(metodi di classe) e funzioni anonime assegnate ai valori (create utilizzando =>
) - rimuove le differenze in entrambi implementazione e comportamento .
Il risultato è che le due definizioni seguenti indicano la stessa cosa:
def square(x: Int) = x*x
val square = (x: Int) => x*x
Non c'è motivo per l'ultima forma (assegnazione anonima di funzioni anonime) da utilizzare in qualsiasi situazione normale - è semplicemente possibile usarlo al posto del modulo def
.
La sintassi duplicata per la definizione delle funzioni denominate avrebbe danneggiato l'ortogonalità della lingua o qualche altro aspetto del design?
Preferisco questa soluzione perché consente definizioni brevi e intuitive di metodi e funzioni con nome (tramite def
) e brevi definizioni di funzioni anonime (utilizzando =>
).
Modifica: Scala fa la differenza tra le due - le funzioni anonime non sono le stesse dei metodi definiti con def
in Scala. Le differenze sono relativamente sottili però - vedi i post che ho linkato prima.