나는 조엘의 기사 중 하나를 읽었습니다 .
일반적으로, 나는 물건을 숨기는 언어 기능이 약간 무섭다는 것을 인정 해야 합니다. 코드가 보이면
i = j * 5;
… C에서는 적어도 j에 5가 곱해지고 i에 저장된 결과가 있다는 것을 알고 있습니다.
그러나 C ++에서 동일한 코드 스 니펫을 보면 아무것도 모릅니다. 아무것도. C ++에서 실제로 무슨 일이 일어나고 있는지 알 수있는 유일한 방법은 i와 j가 어떤 타입인지 알아내는 것입니다. j는
operator*
오버로드 된 유형 일 수 있으며 곱하려고 할 때 정말 재치있는 일입니다.
(Emphasis mine.) 사물을 숨기는 언어 기능이 무섭습니까? 당신은 어떻게 그것을 두려워 할 수 있습니까? 객체 지향 프로그래밍의 주요 아이디어 중 하나 ( 추상 이라고도 함)를 숨기지 않습니까? 메소드를 호출 할 때마다 a.foo(b)
그 기능이 무엇인지 전혀 모릅니다. 어떤 유형 a
과 유형 , b
다른 곳에서 선언 될 수 있는 유형을 찾아야합니다 . 프로그래머에게 너무 많은 것을 숨기므로 객체 지향 프로그래밍을 제거해야합니까?
그리고 어떻게 j * 5
에서 어떤 다른 j.multiply(5)
당신이 연산자 오버로딩을 지원하지 않는 언어로 작성해야 할 수있는? lo, 보라, 재치있는 무언가를 하는 메소드 가있는 유형 일 수 있기 때문에 메소드 j
내부 의 유형 과 엿보기 를 다시 찾아야합니다 .multiply
j
multiply
"Muahaha, 나는 방법의 이름을 짓는 사악한 프로그래머 multiply
이지만, 실제로하는 것은 완전히 애매하고 비 직관적이며, 곱셈과는 전혀 관계가 없습니다." 프로그래밍 언어를 디자인 할 때 고려해야 할 시나리오입니까? 그런 다음 오해의 소지가있을 수 있으므로 프로그래밍 언어의 식별자를 포기해야합니다!
메소드의 기능을 알고 싶다면 문서를 보거나 구현 내부를 들여다 볼 수 있습니다. 연산자 과부하는 단지 구문 설탕이며, 그것이 게임을 어떻게 변화시키는 지 보지 못합니다.
제발 깨달아 줘