Come valutare quanto bene si conosce la programmazione funzionale [chiusa]

7

Mi sono chiesto come determinare se io conosco la programmazione funzionale. Conosco intendo in senso Journeyman, non un maestro, ma abbastanza competente per fare il lavoro.

Mi piacciono i costrutti linguistici w / query / data shaping incorporati, ma conosco i dettagli di mappe, filtri e aggregati sotto forma di Linq , Sql e Reactive Extensions sufficienti per affermare che si conosce la programmazione funzionale? O sono necessari concetti e competenze specifici aggiuntivi?

Modifica: ho lavorato in OO e lingue che identificano principalmente come OO lang per 15 anni. Poiché non sono in un ambiente identificato come funzionale, c'è poco da misurare.

Sta evitando lo stato immutabile e sapendo come usare fold tutto ciò che c'è?

    
posta Scott Weinstein 24.07.2011 - 19:20
fonte

2 risposte

3

La risposta di Dakotah è importante e vorrei aggiungere un paio di cose:

  • Comprensione delle Monadi.
  • Comprensione dell'ottimizzazione della coda (TCO) e perché è importante e in che modo viene implementata la lingua in questione.
  • Comprensione delle strutture di dati persistenti e come implementarle a mano

Sono abbastanza sicuro che ci siano molte cose, per favore sentiti libero di completare la lista.

    
risposta data 25.07.2011 - 14:49
fonte
3

Il primo passo per essere in grado di riconoscere la differenza tra stili imperativi e funzionali nel codice. Ad esempio, Odersky in Programming in Scala evidenzia che un segno rivelatore è

that if code contains any vars [variables in Scala that can be modified] is is probably imperative style. If the code contains no vars at all--i.e., it contains only vals--it is probably in a functional style. One way to move towards a functional style, therefore, i s to try to program without vars.

Ad esempio, considera questo ciclo while:

var i = 0
while (i < args.length) {
   println(args(i))
   i+=1
}

La var è il segno è imperativo. Questo è Scala diventerebbe

def printargs(args: Array[String]): Unit = {
    args.foreach(println)
}

Ma questo codice non è ancora puramente funzionale perché ha effetti collaterali.

Da un punto di vista funzionale questo dovrebbe essere:

def formatArgs(args: Array[String]) = args.mkString("\n")

Quindi ... per determinare se conosci la programmazione funzionale, stai scrivendo codice senza l'equivalente di vars e nessun effetto collaterale locale !?

    
risposta data 25.07.2011 - 04:25
fonte

Leggi altre domande sui tag