2017-12-19 21 views
1

나는 가독성을 높이기 위해 변수를 많이 사용하는 경향이 있지만 모나드 올 때, 나는 내 변수가 모나드 (들)Monad에 랩핑 된 변수 이름을 지정하는 방법은 무엇입니까?

def getUser(id: Int): Future[User] = ??? 

val _user1 = getUser(1) 
val _user2 = getUser(2) 

for { 
    user1 <- _user1 
    user2 <- _user2 
} yield (user1, user2) 
A (의 가능성 스택)에 싸여 그것을 명확하게하기 위해 내 자신의 대회와 함께

내 동료 중 일부는이 구문을 선호하는 경향이 :

val fUser1 = getUser(1) // makes it clear user is wrapped in a Future 

을하지만이 오류가 발생하기 쉬운으로 될 수 있으리라 생각합니다 :

// getUser now returns an option 
def getUser(id: Int): Option[User] 

val fUser1 = getUser(1) // still compiles but is misleading 

// same, if getUser returns a Future[Either[String, User]] 
val fUser1 = getUser(1) // fUser1 looks like a Future[User] to me 

내가 접두사 생각 버지니아 riables 이름은 _에 의해 최악의 솔루션이지만 이상적이지 않습니다 ... 당신은 해결책이 있습니까?

+0

과용/잘못된 사용은 좋은 생각이 아닙니다. 'Monad '도 예외는 아닙니다. 필자가 생각하기에,'Int'를'Future'에 래핑하는 것은 쓰레드 오버 헤드의 막대한 비용을 추가하는 것 이외의 목적을 가지고 있지 않습니다. 이름에 대해 궁금한 점이 있다면'userFuture1' 또는'user1Future'의 스키마를 따를 수 있습니다. –

+2

이것을 [헝가리 표기법] (https://en.wikipedia.org/wiki/Hungarian_notation)이라고합니다. – Jesper

+4

'val user1 : Future [User] = getUser (1)'에 대해 살펴본 다음, 타입 선언을 한 번 볼 수있는 충분한 범위에 있는지 확인하십시오. – Tom

답변

2

값이 래핑되었음을 나타내는 밑줄 접두사는 틀에 얽매이지 않으므로 다른 독자에게 도움이되지 않을 것으로 생각됩니다.

필드를 나타내는 데 밑줄 접두사가 일반적으로 사용됩니다 (예 : C#의 경우 Naming Conventions in C# - underscores

futures에 "f"접두어를 사용하면 Hungarian Notation이며 구식이라면 적어도 널리 이해됩니다.

형식을 강조하는 것이 필요하다고 느낀다면 userFuture과 같은 접미사를 사용하는 것이 좋습니다. 그렇지 않으면 user을 사용합니다.

유형을 분명히하기 위해 유형 주석을 사용할 수도 있습니다.

하지만이 오류가 발생하기 쉬운 등이 될 수 있으리라 생각합니다 : val user: Future[User] = getUser(1)

당신은 말할

// getUser now returns an option 
def getUser(id: Int): Option[User] 

val fUser1 = getUser(1) // still compiles but is misleading 
당신은 컴파일러에 의해 시행되는 명명 규칙을 찾을 수 없습니다

, 그래서이 귀하가 선택한 명명 규칙에 우려가 적용됩니다.