2014-09-05 18 views
6

W ruby ​​? jest dozwolone na końcu identyfikatora, który umożliwia takie rzeczy jakodpowiednik ruby ​​...? w haskell

jeśli do_something? do_something

, które pozwalają na różnicowanie funkcji polegającej na przywracaniu funkcji boolowej.

W Haskell oczywiście podpis typu informuje o różnicy między tymi dwiema funkcjami, ale czy istnieje konwencja nazw lub wzorzec nazw do nazwy bool lub opcji?

W moim przypadku chcę wygenerować (lub nie) niektóre etykiety w zależności od wartości opcji (przekazanych jako argument).

oczywiste kod byłby

generate options = do 
    when (generateLabels? options) generateLabels 

ale jak generateLabels? nie jest ważna nazwa, jak mogę nazwać?

+6

Nie widzę odpowiedzi na to pytanie bez opinii. Nie znam konwencji, ale mógłbym ją nazwać 'labelsAreNeeded :: Options -> Bool'. Następnie czytałoby to jak angielskie zdanie "kiedy etykiety są potrzebne z podanymi opcjami, generują etykiety". – bheklilr

+0

Nie, niezupełnie. Poza oczywistą konwencją nadawania takich nazw funkcji, które brzmią, jakby stanowiły coś prawdziwego. – Cubic

+0

@bheklilr: W rzeczy samej jest to bardzo uparte, ale komunał mógłby mieć do tego ogólną konwencję. Jednak podoba mi się twoja odpowiedź, nawet jeśli nie działa jako ogólny wzór (jak "?") – mb14

Odpowiedz

6

Jeśli spojrzysz na funkcje that return Bool, zauważysz, że konwencją jest użycie predykatu, który po użyciu w kodzie czyta się jak zdanie. Na przykład:

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

W funkcji sugeruję, że zmiana nazwy generateLables? coś jak needsLabels jak @bheklilr wskazał w celu uczynienia kodu bardziej czytelny.

+1

Chciałbym zwrócić uwagę, że istnieją wyjątki od tej reguły, a mianowicie 'even',' odd', ' null' i garstka innych, ale w większości bibliotek poza 'base', konwencja użycia jakiegoś czasownika w nazwie funkcji jest dość powszechna. – bheklilr

+0

Zwykle używam patrzenia "jest ...", ale nie mogłem znaleźć niczego odpowiadającego mojej sprawie. 'needsLabels' jest dokładnie tym, czego potrzebuję. – mb14

Powiązane problemy