Esiste una struttura / modello / formato che segue la maggior parte delle funzioni?

2

Pubblicazione prima volta.

So che questa è una domanda molto generalizzata, mi dispiace per quello, non so come dire più appropriatamente.

Ho notato una tendenza, uno schema nei metodi, sembra in quasi tutti i metodi, ad esempio, in Java (non ho programmato molto in altri linguaggi anche se immagino sia lo stesso) il metodo sembra condividere un schema generale nelle loro creazioni.

È qualcosa dell'ordine:

  • Crea variabili locali per archiviare / copiare oggetti da variabili di istanza;
  • Crea un ciclo per scorrere le cose;
  • Crea una serie di istruzioni / condizioni if, possibilmente accedendo ai metodi pre-fatti;
  • verifica eventuali eccezioni / problemi lungo il percorso;
  • Restituisce l'output desiderato delle operazioni da quanto sopra;

E tutti gli altri aspetti come il polimorfismo, la ricorsione, le interfacce, l'ereditarietà sembrano essere funzioni / aggiunte concettuali ai codici prestazioni e funzionalità

È vero? So che ogni metodo è unico e probabilmente è necessaria una combinazione speciale di quanto sopra. In generale, la maggior parte dei metodi segue uno schema? C'è un modo migliore di scrivere la lista sopra, in un modo più formale?

Grazie, apprezzo il tempo dedicato a leggere questo post.

    
posta Soscrates Fd 05.11.2016 - 16:13
fonte

3 risposte

2

Esattamente in che modo il codice è disposto di solito dipende dal codice paradigma stai seguendo.

Java è generalmente considerato un linguaggio OO, ma è anche possibile scrivere codice procedurale in esso. In tal caso, un metodo Java procedurale apparirà diverso da un metodo OO Java in quanto non sfrutterà le funzionalità OO integrate del linguaggio.

La Programmazione funzionale è un altro paradigma in cui il metodo generale "modello" è diverso.

E, se sei abbastanza coraggioso da evadere del tutto dalla programmazione Imperativa, allora puoi guardare alla programmazione Delcarativa dove l'ordine di esecuzione delle tue affermazioni non è esplicito.

Normalmente proverei a fornire alcuni esempi per confrontare e confrontare ogni paradigma, ma non sono affatto un esperto. Il mio skillset è limitato all'imperativo OO paradigm mash-up (con un trattino di FP lì grazie a C #).

    
risposta data 05.11.2016 - 16:32
fonte
2

Is this true? I know that each method is unique and a special combination of the above is probably require. Generally speaking do most methods follow a pattern?

No, la maggior parte dei metodi non segue lo schema che hai descritto. Sarebbe più esatto dire che ci sono molti modelli diversi, più piccoli, e molti metodi seguono uno o più di questi modelli.

Ad esempio, input sanitization potrebbe essere considerato un pattern, e la maggior parte dei metodi, in effetti, tenterebbe di controllare e alla fine normalizzare i valori dagli argomenti prima di utilizzarli. A meno che non lo facciano, a volte non lo fanno per una buona ragione.

Immagina un metodo che memorizza il nome e il cognome di una persona in un database relazionale. Il metodo deve verificare la lunghezza dei nomi prima di eseguire la query insert SQL?

  • A volte sì. Fare una query che farà necessariamente fallire non è una buona idea, perché sprecherà le risorse del database, sprecherà la larghezza di banda della rete e, nel peggiore dei casi, renderà possibile a un utente malintenzionato di eseguire un attacco DOS sul database stesso.

  • A volte no. Se stai scrivendo una piccola applicazione che utilizza NoSQL per archiviare i dati localmente (sul computer del cliente), potrebbe essere interessante mantenere la regola della lunghezza massima in un unico posto, il database stesso, invece di duplicare la logica.

Considerando lo schema di cui stavi parlando nella tua domanda, molti metodi non lo seguono affatto . Ad esempio, prendi un metodo filter che semplicemente cammina attraverso una sequenza e restituisce solo gli elementi che corrispondono a un predicato. Hai un ciclo, ma nessuna variabile locale, forse nessuna gestione delle eccezioni, e ovviamente nessuna istruzione return alla fine, poiché i risultati erano yield -stornati progressivamente all'interno del ciclo stesso.

Questo significa che il tuo pattern è semplicemente troppo complesso per essere utile. Modelli più semplici, tuttavia, potrebbero funzionare. Alcuni, come la convalida dell'input, non cambiano la natura del metodo. Altri, come "vai a prendere il valore da un campo e restituiscilo così com'è" sono indicativi di un tipo specifico di un metodo - in questo caso, un getter .

Is there a better way of writing out the above list, in a more formal way?

No e non ne hai bisogno.

L'obiettivo di un pattern è essere in grado di scambiare facilmente le tue idee con le tue coppie. Quando utilizzi una fabbrica astratta , non è necessario inizia a disegnare diagrammi complicati agli altri membri della tua squadra: semplicemente dici loro che stai usando una fabbrica astratta (idealmente attraverso i nomi delle tue classi), e sono (si spera) sapendo di cosa stai parlando e cosa significa in termini di organizzazione delle classi e del loro utilizzo.

Ciò funzionerebbe per piccoli "schemi" che ho elencato sopra. Una semplice parola getter dice molto ad un altro sviluppatore su un metodo specifico: se vedo un metodo Java chiamato getPrice , posso indovinare il suo contenuto. Allo stesso modo, dire a qualcuno che devi disinfettare gli input nel tuo metodo è più facile che spiegare che devi avere un sacco di condizioni che controllano i casi limite come la lunghezza delle stringhe, i valori null , il valori numerici fuori dall'intervallo e altre cose sgradevoli prima di poter utilizzare gli argomenti all'interno del metodo.

    
risposta data 06.11.2016 - 01:44
fonte
1

Non sono davvero d'accordo con MetaFight, se sto facendo OO o procedurale ci sono cose che condividono in modo definitivo funzioni / metodi:

  • Controlli dei prerequisiti: controlla sempre tutti all'inizio della funzione, non quando li userai. Ha reso le cose più chiare quando lo hai letto in seguito.
  • Complessità ciclomatica: non utilizzare percorsi di condizioni troppo diversi.
  • Singolo punto di ritorno: quando possibile avere un solo ritorno. Se non si dispone di un'eccezione nella lingua, è possibile utilizzarla nel controllo dei prerequisiti anziché avere alcun livello di rientro per niente.
  • Come hai detto, non modificare i valori dei parametri specialmente quando le cose vengono passate dal puntatore / riferimento, può essere fonte di confusione.
  • E tutto ciò che conosciamo come numeri magici e così via si applica a tutte le lingue.

Ovviamente tra procedurali o OO avrete delle differenze, ma oserei dire che se si elencano queste differenze, la lista sarà molto più vicina a ciò che hanno in comune.

    
risposta data 05.11.2016 - 16:54
fonte

Leggi altre domande sui tag