10

동적 유형 지정 (선택적 정적 유형 지정은 물론)이있는 Groovy 언어가 제공됩니다. 또한 목록,지도 및 범위를 기본적으로 지원하므로 목록 및지도, 목록 목록,지도 목록 등 목록을 많이 사용합니다.동적으로 유형이 지정된 언어의지도/목록에 대한 변수 이름 지정 규칙

정적 언어 (esp with Generics) 당신은 항상 당신의 타입이 무엇인지에 대한 아이디어를 가지고 있습니다. 나는 역동적 인 언어에 상당히 익숙하지 않다. 그리고 내 변수가 무엇인지를 추적하는 것이 약간 어려워지고있다. 그래서 다른 사람들이 이러한 변수를 지키기 위해 일종의 변수 명명 규칙을 사용하는지 궁금하다.

예를 들어 키의 날짜 맵과 값의 정수가 있다고 가정합니다. 또는 정수 목록 또는 문자열을 키로, 계정 개체를 값으로 포함하는지도 목록.

변수 이름 뒤에 명확한 규칙을 만드는 것처럼 보이게하지 않고 처리 할 데이터 유형 구조를 추적하는 데 도움이됩니다.

팁이 있습니까?

+1

It 's 유감스러운 점은 코멘트를 downvote하는 능력이 없다는 것입니다. 이것은 완전히 받아 들일 수있는 질문 인 것 같습니다. –

+0

@ David, Comments * "rude"또는 "non-constructive"로 플래그 할 수 있습니다. – leoger

+0

"def"를 사용하는 것이 일반적이지만 Java 프로그래머에게는 불편할 수 있습니다. "String"또는 "Map"에 대해 "def"를 사용하는 것은 실제로 이점이 없습니다. "Groovy 프로그래머가" 스타일 "을 뽑을 수 있습니다. 개체의 유형을 알고 싶다면 실제 유형을 사용하십시오. 이것은 또한 IDE가 더 유용 할 수있게합니다 (Ctrl-space 완성은 훨씬 더 잘 작동합니다).그러나 진행함에 따라 때때로 def로 더 편하게 느껴질 수 있으므로 올바른 때에 사용하십시오. 일반적으로 제네릭도 잘 작동합니다. –

답변

13

이것은 일반적인 초보자의 애도입니다. 명명 규칙을 사용할 수는 있지만 너무 오래 지나면 그 변수를 나타내는 (변수의 의미와 관련하여)은 의 표현 방법 인이 표시됩니다. "유형").

+1

이것은 아주 오래된 질문입니다.하지만 저는 혼자 힘으로 어떤 변수가 사용 가능한지를 한 눈에 파악할 수있는 것으로 표현하고 있습니다. 예를 들어, 어떤 것이 Array 또는 List인지 상관하지 않을 수도 있지만, 반복 할 수 있는지 여부는 신경 써야합니다. 이 경우 국제 대회는 어떻습니까? 예 : "nameList"대 "names"? – ossek

2

이름이 짧으면 이름을 "nounToNoun"와 같은 이름으로 지정하는 경향이 있습니다. 따라서 날짜에 정수로 매핑하는 예를 사용하면 "dateToCount"라는 이름을 붙일 것입니다 (정수가 무언가를위한 카운터 인 경우). 그런 식으로지도가 분명하고 무엇이 무엇에 매핑되고 있는지 분명합니다. 문제는 때로는 이런 종류의 이름을 짧고 가독성있게 유지하는 것이 어렵다는 것입니다. 예를 들어 "userToLoginHistory"가 약간 다루기 시작합니다.

목록의 경우 일반적으로 변수 이름에 복수형을 사용합니다. 따라서 "사용자"는 단일 사용자이고 "사용자"는 사용자 목록입니다.

솔직히 말해지도 목록에 어떤 이름이 좋은지 잘 모르겠습니다.

7

변수의 이름은 그것이 무엇을 의미하는지 코드를 읽는 누군가에게 설명해야합니다. 당신은 정수로 날짜의지도를 가지고 있다면, 예를 들어 (제안 변수 이름은 괄호 안에있다), 대표 않습니다

  1. 해당 날짜에 의한 지불 (paymentsDue)
  2. 일의 수 사이의 숫자 매핑 된 날짜와 시간에 다른 점은 (daysPassed)는 스택 오버플로에 해당 날짜에 게시 된 메시지의
  3. 숫자 (numberOfPostedMessages)
  4. 변수 타입이 준비되지 않은 언어로

, 당신은을 추가 할 수 있습니다 접두사 o f 접미사 (예 : paymentsDueMap). 그러나 변수 이름에 추가 유형 정보 (예 : datesToInts)를 인코딩하지 말 것을 권장합니다. 이는 일상적으로 이익보다 해를 끼칩니다. 당신은 문자열과 계정간에지도 목록으로 복잡한 데이터 구조를 가지고있는 경우

마지막으로, 가장 좋은 방법은 별도의 클래스로 그 캡슐화, 그 의도에 따라 이름을하는 것입니다.

3

정적 언어 (제네릭의 경우 esp)에는 항상 유형이 무엇인지에 대한 아이디어가 있습니다.

잠시 후 동적 언어로 프로그래밍 할 때 유형을 사용하면 이런 식으로 생각합니다. 두 가지 조언 :

  1. 좋은 변수 이름을 사용하십시오. 예를 들어, int의 날짜 맵이있는 경우 BirthdateToTotalLookup과 같은 이름을 지정할 수 있습니다.
  2. 어떤 시각적 단서를 찾아야하는지 알아보십시오. 그것은 명백한 것처럼 보일 수 있지만,이 같은 단서를 찾는 습관을 걸 렸어요 :

    sum += x['10-16-92'] 
    
  3. 위의 코드의 조각에서

, 내가 그 X를 말할 수는있는지도입니다 키로 날짜를 반환하고 어떤 종류의 숫자를 반환합니다.

2

동적 언어의 장점 중 하나는 객체를지도로 사용하더라도지도가 아니어도된다는 것입니다. 모든 메시지는 메시지가 전송되는 모든 것을 지원해야합니다. 그루비 (Groovy)에서 주어진 메소드가 맵을 기대하여 String 키로 물건을 검색 할 수 있다고 알고 있다면 - 전체 맵, 빼낸 맵, 키와 같은 이름의 속성을 가진 Expando를 줄 수있다. , 또는 키와 같은 이름의 속성이있는 다른 모든 객체가 될 수 있습니다. 이는 someObject [ "keyname"] 및 someObject.keyname이 동일한 항목이기 때문입니다. 물론 코드가 someObject.get ("keyname")을 호출하면 어떻게 든 그 메서드를 연결해야합니다.)

요점은 Groovy와 같은 동적 언어에서 TYPES에 대한 것이 아니라 지원되는 코드에 대한 것입니다. 메시지. 개념적으로지도라면, birthdateToTotal이라는 이름을 정하는 것이 합리적이라고 할 수 있습니다 (총계 [birthdate]가 birthdateToTotal [birthdate]보다 낫기 때문에 'totals'라고하는 것이 더 좋겠지 만) 그것을 지정하지 마십시오. 나중에 유연성을 잃게됩니다.

2

시간이 지남에 따라 성장할 것입니다. 헝가리를 사용하는 20 년짜리 프로그래머는 아직 모릅니다 만 정적 유형의 언어로 코딩하고 있기 때문에 거의 이해할 수 있습니다.

이것을 고려하십시오. 이름을 지정하는 변수는 HashMap 일 수 있습니다. 이름에 어떤 유형을 추가합니까? 지도? 이것은 중도 적 대답입니다. 왜 수집하지 않습니까? 그런 식으로 데이터를 저장하는 방식을 변경하려고하면 변수 이름을 변경할 필요가 없습니다. HashMap을 사용하지 마십시오. 독자가 무슨 일이 일어나는지 정말로 알리고 싶다면.

의심스러운 부분이있을 수 있습니다. 동적 언어 (심지어 다형성)의 요점은 제시되는 변수의 정확한 유형을 알 필요가 없으며 데이터 자체 만 중요하다는 것입니다. 해당 데이터에 인터페이스하는 방법에 대한 힌트를 얻으 시겠지만 곧 대부분의 경우에 이미 알고 계시거나 typesByZipCode, totalByBirthdate 등 형식을 지정하지 않고 해당 정보를 변수에 쉽게 넣을 수 있습니다.