Per tutto l'anno passato ho scritto il codice Scala (proveniente da un background Java). Mi è piaciuto molto come potresti creare un codice più semplice e più pulito, con vals, classi di case, funzioni map / filter / lambda, impliciti e inferenza del tipo. L'ho usato principalmente per un'applicazione basata su Akka .
Quest'anno sono su un progetto Scala con un nuovo team, a cui piace molto la programmazione funzionale. Usano pesantemente Scalaz e il codice è riempito ovunque di applicativi, limiti di contesto, lettore / scrittore / monade di stato, anche il metodo principale è "avvolto" in una monade I / O. Il loro ragionamento è che questo fa sì che il compilatore "funzioni per noi" affermando che il codice è corretto e che ogni funzione è priva di effetti collaterali.
Anche così, dal mio punto di vista tutta questa sintassi interferisce davvero con la logica aziendale. Ad esempio, un tipo di "MyBusinessObject" va bene, così come tipi come "Elenco [MyBusinessObject]", "Opzione [MyBusinessObject]" o anche "Future [MyBusinessObject]". Tutti hanno un significato e uno scopo chiari. D'altra parte, codice come:
def method[M[_]: Applicative] = {
case (a, b) => (ca[M](a) |@| cb[M](b)) {
case t @ (ra, rb) =>
if (ra.result && rb.result) t.right
else t.left
}
}
aggiunge complessità al programma o sono solo io che non sono abituato a questo modo di programmare?
>>=
e <$>
, che non significano nulla fino a quando sapere cosa fanno. Dopo aver appreso cosa significano, tuttavia, ora mi leggono in modo molto naturale e rapido. Non proprio una risposta, solo la mia esperienza oggettiva con cose come questa. Uso anche Scala, ma non ho esperienza con la libreria Scalaz.
for(i=0; i<7; ++i) { trivialOperation(i); }
con qualche trivialOperationCount
variabile scomoda , vero?) Ora, i linguaggi di programmazione funzionale con la corrispondenza dei modelli a volte introducono alcune più variabili in cui tu scrivere semplicemente le chiamate al metodo accessor in OO. Il risultato è generalmente più conciso; forse un po 'meno autoesplicativo, ma cercare la dichiarazione dei dati normalmente lo chiarisce rapidamente. La digitazione statica aiuta molto, non è come in APL.