Disposizione delle funzioni di base nei linguaggi di programmazione funzionale di alto livello

5

Mi piacerebbe sapere se esiste una guida generale o una procedura ottimale per il wrapping delle funzioni di base.

Prendiamo ad esempio J . Ha diverse "funzioni" di 1 o 2 caratteri chiamate primitive. Esempi:

  • , : appiattisci una matrice o aggiungi a un vettore
  • { : combinazioni di catalogo o prendi l'ennesimo elemento di una matrice
  • {. : prendi il primo o il n elemento di una matrice
  • } : modifica gli elementi in una matrice

Alcuni programmatori J pensano che sia meglio usarli come tali, altri li avvolgeranno in funzioni come queste:

  • Append =: ,
  • TakeFirst =: {.

Ho scoperto che non è sempre pratico perché sono abituato ai "simboli" attuali, ma in pratica significa che sono di parte.

Quindi, qualche consiglio sulle migliori pratiche da usare? Per avvolgere o non avvolgere?

    
posta MPelletier 12.08.2011 - 16:27
fonte

2 risposte

11

Molti anni fa, prima che le legioni dei programmatori Pascal fossero state instradate dalle orde di C, alcuni Pascaliani cercarono di adattarsi alla nuova realtà facendo così:

#define BEGIN {
#define END }

in modo che possano scrivere:

void main(int i)
BEGIN
    printf("Hello, world!");
END

C'erano spesso altre macro simili progettate per aggrapparsi a una sintassi ancora più Pascal. Non passò molto tempo prima che si rendessero conto che si stavano solo torturando e che si sono lasciati andare sul lato C volontariamente o sono morti.

Se intendi utilizzare una lingua, usa la lingua. Questo potrebbe richiedere di impararlo prima. Incollare un gruppo di nomi non standard per gli operatori standard può rendere le cose più facili da afferrare nel brevissimo termine, ma si finisce con un codice che non può essere facilmente compreso da altre persone esperte nella stessa lingua.

I wrapper hanno senso quando è necessario adattare una classe o una lingua a un'altra. Ad esempio, potresti avere una classe Java che avvolge le chiamate alle funzioni C o C ++ per rendere tale funzionalità più facile da usare e più accessibile per gli sviluppatori Java. Se intendi utilizzare un wrapper, assicurati che semplifichi davvero il codice, prevenga bug o aggiunga altro valore. Non farlo solo per evitare di imparare la sintassi.

    
risposta data 12.08.2011 - 17:05
fonte
5

Le persone che stanno eseguendo il wrapping delle funzioni devono appartenere al gruppo Visual Basic (VB) o al suo gruppo. Lingue come VB sono più simili all'inglese e usano meno simboli rispetto alle lingue simili a C e altre lingue che sono più simboliche. Disporre le funzioni rende più facile la lettura per queste persone, ma probabilmente rende le cose più difficili per quelle persone che sono già abituate allo stile simbolico.

In origine ero un programmatore VB, ma passai a C # quando ho cambiato lavoro, e ora preferisco lo stile più simbolico e astratto di C #.

    
risposta data 12.08.2011 - 17:02
fonte

Leggi altre domande sui tag