Recentemente ho imparato un po 'di Ruby e ho avuto la seguente esperienza. Avevo scritto un piccolo strumento di circa 200 righe di codice e, come programmatore di Ruby inesperto, avevo usato diversi loop per costruire array da altri array. Per es.
gs = ... # Some array of input data.
l = gs.size
i = 0
r = Array.new
while (i < l) do
if (cond(gs[i]))
r.push(gs[i])
end
i = i + 1
end
# r contains the result now.
Poi ho scoperto che posso farlo in uno stile funzionale:
gs = ... # Some array
r = gs.select { |g| cond(g) }
# r contains the result now.
Quindi ho sostituito immediatamente la maggior parte dei miei loop nel codice con costrutti come ogni, select, take_while, drop_while e così via. Ho deciso di utilizzare uno stile funzionale in Ruby ogni volta che è possibile e cercare di evitare uno stile imperativo.
Come altro esempio, in C ++ tendo ad usare classi e metodi ovunque e uso le funzioni solo per piccoli compiti di utilità privati per l'implementazione di qualche classe. Quindi tendo a pensare agli oggetti orientati quando lavoro in C ++ ed evito uno stile procedurale quasi completamente.
Più in generale, quando lavoro su un dato progetto in una determinata lingua, tendo a scegliere un paradigma e ad attenervici per tutto il progetto: trovo che questo rende il mio codice più uniforme, più facile da leggere e da debugare, il che, IMO, è molto importante, soprattutto per il codice di produzione.
Tuttavia, spesso penso che forse dovrei esplorare di più e provare diverse possibilità offerte da un linguaggio, ad es. utilizzare diversi paradigmi e provare diverse soluzioni. Per me ciò comporta un sovraccarico sia durante la codifica (dovrei renderlo procedurale o orientato agli oggetti? Imperativo o funzionale?) E durante la revisione o il debug del codice (cosa volevo fare qui?) A causa della maggiore complessità.
Quindi la mia domanda è: tendi anche a selezionare un paradigma di programmazione preferito quando si codifica e ci si attiene, o si tende ad esplorare di più ea mixare diversi paradigmi?
Se mischia paradigmi diversi, hai la sensazione che ci sia un sovraccarico in termini di quanto velocemente puoi scrivere ed eseguire il debug del codice (aggiunta complessità, passaggio tra mentalità diverse) o è solo questione di imparare come fare e allora puoi anche essere più produttivo?
O mescoli diversi paradigmi in un modo più strutturato, ad es. applicate ciascun paradigma a una specifica classe di problemi (ad esempio, funzionale per le query, orientata agli oggetti per gli aspetti architettonici e così via)?