여기 당신의 생각을 듣고 싶은 프로그래밍 / 언어 문제가 있습니다.
우리는 언어 구문의 일부가 아니지만 코드를 더 읽기 쉽게 만드는 역할을하는 대부분의 프로그래머가 따라야하는 규칙을 개발했습니다. 물론 이것들은 항상 논쟁의 여지가 있지만, 대부분의 프로그래머들이 동의할만한 핵심 개념이 적어도 있습니다. 변수의 이름을 적절하게 지정하고, 일반적으로 이름을 지정하고, 긴 함수, 캡슐화 등을 피하면서 행을 지나치게 길게 만들지 마십시오.
그러나 아직 내가 언급 한 사람을 찾지 못했고 그중 가장 큰 문제 일 수있는 문제가 있습니다. 함수를 호출 할 때 인수가 익명이되는 문제입니다.
함수는 일반적으로 프로그래밍에서하는 것보다 훨씬 엄격한 정의를 갖기 때문에 f (x)가 명확한 의미를 갖는 수학에서 나옵니다. 수학의 순수한 함수는 프로그래밍에서 할 수있는 것보다 훨씬 적은 작업을 수행 할 수 있으며 훨씬 더 우아한 도구이며 일반적으로 하나의 인수 (보통 숫자) 만 취하며 항상 하나의 값 (보통 숫자)을 반환합니다. 함수가 여러 인수를 사용하는 경우 거의 항상 함수 도메인의 추가 차원 일뿐입니다. 다시 말해, 하나의 주장은 다른 것보다 중요하지 않습니다. 그것들은 명시 적으로 정렬되어 있지만, 그 외에는 의미 론적 순서가 없습니다.
그러나 프로그래밍에서 우리는 더 많은 자유 함수를 정의 할 수 있으며,이 경우에는 좋은 것이 아니라고 주장합니다. 일반적인 상황에서 다음과 같이 정의 된 기능이 있습니다.
func DrawRectangleClipped (rectToDraw, fillColor, clippingRect) {}
정의를 살펴보면 함수가 올바르게 작성되면 무엇이 무엇인지 완벽하게 알 수 있습니다. 함수를 호출 할 때 IDE / 편집기에서 인텔리전스 / 코드 완성 마법을 사용하여 다음 인수가 무엇인지 알려줄 수도 있습니다. 하지만 기다려. 실제로 전화를 걸 때 필요한 경우 여기에없는 것이 있습니까? 코드를 읽는 사람에게는 IDE의 이점이 없으며 정의로 건너 뛰지 않으면 인수로 전달 된 두 사각형 중 어느 것이 무엇에 사용되는지 알 수 없습니다.
문제는 그 이상으로 진행됩니다. 인수가 지역 변수에서 나온 경우 변수 이름 만 보이기 때문에 두 번째 인수가 무엇인지 모르는 상황이있을 수 있습니다. 이 코드 줄을 예로 들어 보겠습니다.
DrawRectangleClipped(deserializedArray[0], deserializedArray[1], deserializedArray[2])
이것은 다른 언어로 다양한 범위로 완화되지만 엄격하게 유형이 지정된 언어로도 변수를 의미있게 명명하더라도 변수에 함수에 전달 할 때 변수의 유형을 언급하지조차 않습니다.
일반적으로 프로그래밍과 마찬가지로이 문제에 대한 많은 잠재적 솔루션이 있습니다. 많은 사람들이 이미 대중적인 언어로 구현되어 있습니다. 예를 들어 C #의 명명 된 매개 변수 그러나 내가 아는 모든 것은 심각한 단점이 있습니다. 모든 함수 호출에서 모든 매개 변수의 이름을 지정해도 코드를 읽을 수는 없습니다. 평범한 텍스트 프로그래밍이 우리에게 제공 할 가능성이 점점 커지고있는 것 같습니다. 거의 모든 영역에서 JUST 텍스트로 이동했지만 여전히 동일하게 코딩됩니다. 코드에 더 많은 정보가 필요합니까? 더 많은 텍스트를 추가하십시오. 어쨌든, 이것은 약간의 접선을 얻고 있으므로 여기서 멈출 것입니다.
두 번째 코드 스 니펫에 대한 한 가지 대답은 먼저 명명 된 변수로 배열의 압축을 풀고 사용합니다.하지만 변수의 이름은 많은 것을 의미 할 수 있으며 호출 된 방식이 반드시 필요한 방식을 알려주지는 않습니다. 호출 된 함수의 컨텍스트에서 해석됩니다. 로컬 범위에는 의미 상으로 나타내는 것이기 때문에 leftRectangle과 rightRectangle이라는 두 개의 사각형이있을 수 있지만, 함수에 제공 될 때 나타내는 것으로 확장 할 필요는 없습니다.
실제로 변수의 이름이 호출 된 함수의 컨텍스트에서 명명 된 경우 해당 함수 호출로 할 수있는 것보다 적은 정보를 도입 할 수 있으며 코드를 더 나쁜 코드로 만드는 경우에는 어느 정도 수준에서 발생합니다. rectForClipping에 저장하는 사각형을 생성하는 프로 시저가 있고 rectForDrawing을 제공하는 다른 프로 시저가있는 경우 DrawRectangleClipped에 대한 실제 호출은 식입니다. 새로운 것을 의미하지 않는 선은 컴퓨터가 이미 이름으로 설명 했음에도 불구하고 원하는 것을 정확하게 알고 있다는 것입니다. 이것은 좋지 않습니다.
나는 이것에 대한 신선한 관점을 듣고 싶습니다. 이 문제를 처음으로 고려한 사람이 아니라고 확신하므로 어떻게 해결됩니까?