2014-09-05 14 views
6

In rubino ? è consentito al termine della identificativo che permette cose comeequivalente di rubino ...? in Haskell

se fai_qualcosa? do_something

che consentono di differenziare la funzione di eseguire il bool di una funzione facendo qualcosa.

In Haskell, ovviamente la firma del tipo indica la differenza tra queste due funzioni, ma esiste una convenzione di denominazione o un modello di denominazione per denominare bool o opzioni?

Nel mio caso, voglio generare (o meno) alcune etichette in base al valore di un'opzione (passato come argomento).

il codice ovvia sarebbe

generate options = do 
    when (generateLabels? options) generateLabels 

ma come generateLabels? non è nome valido, come posso chiamarlo?

+6

Non vedo come si possa rispondere a questa domanda senza essere giudicati. Non sono a conoscenza di una convenzione, ma potrei chiamarla 'labelsAreNeeded :: Options -> Bool'. Quindi leggerebbe la frase inglese "quando sono necessarie le etichette date le opzioni, genera etichette". – bheklilr

+0

No, non proprio. Oltre all'ovvia convenzione di dare nomi di funzioni come quelli che rappresentano qualcosa di vero. – Cubic

+0

@bheklilr: E 'un po' supponente, ma la comunita 'potrebbe avere una convenzione generale per questo. Tuttavia, mi piace la tua risposta, anche se non funziona come schema generale (come '?') – mb14

risposta

6

Se si osservano le funzioni that return Bool, si noterà che la convenzione utilizza un predicato che, se utilizzato nel codice, legge come una frase. Per esempio:

isDenormalized :: RealFloat a => a -> Bool 
isSigned :: Bits a => a -> Bool 
isAlphaNum :: Char -> Bool 

Nella funzione io suggerirei che si rinomina generateLables? a qualcosa di simile needsLabels come @bheklilr rilevare, al fine di rendere il codice più leggibile.

+1

Vorrei sottolineare che ci sono delle eccezioni a questa regola, vale a dire 'even',' odd', ' null', e una manciata di altri, ma nella maggior parte delle librerie al di fuori di 'base', la convenzione di usare qualche verbo nel nome della funzione è abbastanza comune. – bheklilr

+0

Di solito uso il 'è ...' patttern ma non riesco a trovare nulla che corrisponda al mio caso. 'needsLabels' è esattamente ciò di cui ho bisogno. – mb14