문제

그 외에도에서 명확한 선명도,왜 우리는 충실:
car.getSpeed()car.setSpeed(55)
이 될 수 있을 뿐만 아니라 사용:car.speed()car.speed(55)

내가 알고 있는()에()에 유용한 변경을 유지하는 데이터는 회원 관리에서 모든 것을 유지하여 하나의 장소입니다.

또한,명백하게,그 이해 car.speed()car.speed(55) 기능이 잘못이지만,그럼에서 PHP 도에 Zend Framework,동일한 행위가 사용되는 GET,POST,포스트백.
VB C#있다"속성",과에 의해 사용되는 많은,많의 혐오감을 주었고,거기에 있는 것 루비아 5.times.each, .to_i etc.
당신은 운영자 과부하,여러 상속,가상 기능은 C++,의 특정 조합을 수 있는 드라이브 사람이다.

나는 의미가 있음을 말하는 많은 방법으로 패러다임하는 것은 수행 그것은 이상한 것 같다는 아무도 시도하고 특정 조합이다.

으로 나에게는 이유는 것입 짧은 청소기 읽기 코드입니다.
나는 아주 잘못된 약간 잘못입니다 이것은 다만 이상하고 그래서 사용하지 않거나,다른 어떤?

면 내가 여전히 유지하기로 결정하는 올바른를 사용할 수 있었다. car.speed()car.setSpeed(55).
는 잘못된 어떤 방법으로(그를 생략하면"get")?

감사에 대한 설명.

도움이 되었습니까?

해결책

경 car.속도(),제가 생각하는 내가 말하는 차량의 속도에서 다른 말로 증가하는 속도 및 속도 제한 휴식.그것은 명확하지 않게 getter.

어떤 언어를 허용,당신을 선언하 const 체,그리고 다음을 제한하는 당신을 호출하지 않은 기능을 수정하는 데이터의 개체입니다.그래서 그것은 필요가 있는 별도의 기능을 수정하고 읽는 작업입니다.하는 동안 사용할 수 있 오버로드에 paramaters 을 두 가지 기능,그것을 생각될 것입니다.

또한,당신이 말할 때 그것은 명확하게 읽을 수 있는 주장 내가 할 일에 미리 대비할 수 있도록 지원하는 방법을 이해하는 그것을 읽:

car.speed()

내가"읽는 자동차의 속도..."그리고 그 다음에 나는 숫자가 없다 그래서 나는 수정하고"생각하는 자동차 속도"입니다.

car.getSpeed()

내가 읽고"이를 위해 차량,속도를 얻을"

car.setSpeed(55)

내가 읽고"이를 위해 자동차,설정된 속도하는 55"

그것은 보인다 당신은 기본적으로 인용되는 다른 기능의 언어로 되는 혼란,그리고 다음으로 방어를 만들기 위한 필요한 것입/setters 더 혼란?그것은 거의 같은 소리가 인정하는 것을 제안했다 더 혼란스럽습니다.이러한 기능은 때로는 혼란 방식 때문에 일반적인 목적은 그들이 있습니다.때로는 추상화 수준이지만,결국 그들은 종종 목적되는 더 많은 재사용할 수 있습니다.나는 생각하고 싶은 경우에는 변론에서 찬성 speed()속도(55),당신을 보여주고 싶은 어떻게 사용할 수 있는 새로운 가능성을 위한 프로그래머입니다.

다른 한편으로,C#은 같은 것을 가지고 있는 무슨 설명하신 이후,속성은 다르게 행동으로 획득자 또는 세터 컨텍스트에 따라 그들은 무엇을 사용:

Console.WriteLine(car.Speed); //getter

car.Speed = 55 //setter

그러나 그것은 하나의 속성,두 가지 별도의 섹션에 대한 코드를 구현하고 설정,그리고 그것은 분명 이 get/set 과하지 않는 기능 때문에 속도 그들이 생략()속성으로 정의하기에 적합합니다.그래서 주차.속도()명확하게 함수와 자동차입니다.속도 명확하게 제공 getter.

다른 팁

Get and Set 방법을위한 구문 설탕으로 특성을 갖는 C# 스타일은 가장 표현력이 있습니다.

나는 getters와 setter가 아닌 작업을 캡슐화하는 활성 객체를 선호하므로 의미 적으로 더 풍부한 물체를 얻습니다.

예를 들어, 비즈니스 객체가 아닌 ADT이지만 vector C ++에서는 기능이 있습니다.

size_type capacity() const // how many elements space is reserved for in the vector  
void reserve(size_type n)  // ensure space is reserved for at least n elements 

그리고

void push_back ( const T& ) // inserts an element at the end
size_type size () const     // the number of elements in the vector

자동차를 운전하면 가속기, 클러치, 브레이크 및 기어 선택을 설정할 수 있지만 속도를 설정하지는 않습니다. 속도계 속도를 읽을 수 있습니다. 행동이있는 물체에 세터와 getter를 원한다면 비교적 드 rare니다.

FYI, Objective-C가 사용합니다 car.speed() 그리고 car.setSpeed(55) (다른 구문을 제외하고 [car speed] 그리고 [car setSpeed:55].

컨벤션에 관한 모든 것입니다.

정답은없고 스타일의 문제이며 궁극적으로 중요하지 않습니다. 다른 곳에서 뇌 사이클을 보내십시오.

fwiw 나는 선호한다 class.noun () getter를 위해 class.verb () 세터를 위해. 때로는 동사가 단지 setnoun ()이지만 다른 경우에는 그렇지 않습니다. 명사에 따라 다릅니다. 예를 들어:

my_vector.size() 

크기를 반환하고

my_vector.resize(some_size) 

크기를 변경합니다.

속성에 대한 그루비 접근법은 매우 우수한 IMHO입니다. http://groovy.codehaus.org/groovy+beans

코드의 최종 벤치 마크는 다음과 같습니다.

  1. 올바르게 작동합니까?
  2. 깨지면 고칠 수 있습니까?
  3. 앞으로 새로운 기능을 추가하기가 쉽습니까?
  4. 다른 사람이 들어 와서 수정/강화하기가 쉽습니까?

그 4 포인트가 다루어지면, 왜 누군가가 문제가 발생했는지 상상할 수 없습니다. 대부분의 "모범 사례"는 일반적으로 4 점을 달성하기위한 것입니다.

어떤 스타일이 당신에게 적합한 지 사용하고 일관되게되면 괜찮을 것입니다.

이것은 단지 협약의 문제입니다. SmallTalk에서는 당신이 제안하는 방식으로 끝났고 나는 누군가가 그것에 대해 불평하는 것을 듣지 못했습니다. 자동차 속도를 얻는 것이 있습니다 car speed, 그리고 자동차 속도를 55로 설정하는 것은 car speed:55.

내가 추측을 모험해야한다면,이 스타일을 잡지 못한 이유는 객체 지향 프로그래밍이 우리에게 온 두 줄로 인해 C ++와 대상 c 때문이라고 말할 것입니다. C ++에서 (이력 초기에 더 초기) 방법은 C 함수와 매우 밀접한 관련이 있으며 C 함수는 일반적으로의 선을 따라 명명됩니다. setWhatever() 그리고 다양한 수의 인수에 대해 과부하가 걸리지 않으므로 일반적인 스타일의 명명을 유지했습니다. Objective-C는 다음 (나중에 애플이 된)에 의해 주로 보존되었으며, 다음은 API의 진동성을 선호하고 특히 다른 종류의 방법을 구별하는 경향이있었습니다. 명확하게하기 위해. 그래서 그것은 Cocoa의 컨벤션이되었으며, 이는 요즘 Objective-C의 사실상 표준 도서관입니다.

컨벤션 Java는 getters and setters c#에 대한 컨벤션을 보유하고 있으며, Python에는 공공 필드가 있으며 JavaScript 프레임 워크는 Field ()를 사용하여 Get and Field (value)를 사용하는 경향이 있습니다.

그 외에도에서 명확한 선명도,왜 우리는 충실:자동차.getSpeed()와 자동차입니다.setSpeed(55) 이 될 수 있을 뿐만 아니라 사용:자동차.속도()와 자동차입니다.속도(55)

기 때문에 모든 언어로 발생했, car.speed()car.speed(55) 는 측면에서 동일한 구문입니다.그냥 그들을 보고 그처럼,모두가 값을 반환되지 않는 진정한 후자의 경우를 의미하였습니다.

세터를 부르려고하지만 논쟁을 잊어 버리면 어떨까요? 코드가 유효하므로 컴파일러는 불평하지 않으며 즉각적인 런타임 오류를 던지지 않습니다. 침묵하는 버그입니다.

. ()는 동사임을 의미합니다. 아니요 ()는 명사임을 의미합니다.

   car.Speed = 50;
   x = car.Speed
   car.Speed.set(30)
   car.setProperty("Speed",30)

하지만

   car.Speed()

속도 제한을 초과하도록 명령을 암시합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top