'수학적'기능이 수학적 표기법을 따라야합니까?


11

나는이 질문이 즉시 주관적으로 표시 될 것이라고 생각하지만, 어느 것이 더 낫다고 생각합니까?

double volume(double pressure, double n_moles, double temperature) {
  return n_moles * BOLTZMANN_CONSTANT * temperature / pressure;
}

또는

double volume(double P, double n, double T) {
  return n*R*T/P;
}

다시 말해, 일부 방정식을 구현하는 함수가 해당 방정식의 표기법을 따라야합니까, 아니면 더 자세한 이름을 사용해야합니까?


3
또한 코딩 자체에 쓰는 것보다 변수 이름을 지정하는 방법에 대해 더 많은 시간을 할애합니까? ;-)
Tomas

1
두 번째 대안은 괜찮습니다. 그래도 의견에 변수를 설명하겠습니다.
Giorgio

누군가가 모든 사람의 답변을 검토하고 투표에 적합하다고 생각한 것 같습니다. 이 사람이 그렇게하는 이유를 이야기하고 싶습니까? 대답은 나에게 완벽하게 보였습니다.

기술적으로 이것은 '수학적'표기법과 관련이 없으며 물리학자가 생각하는 것과 관련이 있습니다. 여기에는 산술 이상의 것이 없습니다.
duffymo

2
화씨에서 모든 미국인들이 기온을 통과하는 것을 볼 수 있습니다. 온도의 유형으로 이중을 사용하지 않을 것입니다. 압력에 대해서도 마찬가지입니다. 이름보다 유형을 안전하게 얻는 데 더 관심이 있다고 생각합니다.
Martin York

답변:


14

누가 읽고 있는지에 따라 다릅니다. 영원 토록 코드를 읽는 다음 프로그래머도 열역학에 익숙하다는 것을 보증 할 수 있다면, 잘린 버전으로 가십시오.

내 개인 스타일은 그러한 변수 (약어는이 분야에서 일반적으로 알려져 있음)를 사용하지만 주석에 설명을 포함시키는 것입니다.

/* P : Pressure
   V : Volume
   n : Number of moles
   R : Boltzmann constant
   T : Temperature (in K)
*/
double compute_V(double P, double n, double T) {
  return n*R*T/P;
}

5
점은 무엇인가? 열역학을 구사하지 않는 사람은 변수 이름이 무엇이든 코드를 성공적으로 유지할 가능성이 없습니다.
dsimcha

이것은 정보를 포함하지 않는 것보다 확실히 낫지 만이 시점에서 함수에서 해당 이름을 사용하는 것이 더 쉬운 것처럼 보입니다. 나는 문자를 사용하는 데 많은 유틸리티를 보지 못하고 있습니다 ...
Patrick87

@dsmicha : 예, PV = nRT 가 매우 기본적인 예입니다. 실제로는 일반적으로 알려지지 않았으며 길고 복잡한 경향이있는 더 복잡한 기능이 존재합니다. 따라서 사람이 현장에서 훈련을 받더라도 완전히 외계인 기능을 수행 할 가능성이 높습니다.

4
@ 패트릭 87 : 나는 원래의 형태에 훨씬 가깝기 때문에 종이에서 (또는 메모리에서) 종이를 보면서 표현의 진실성을 신속하게 확인할 수 있기 때문에 문자를 선호합니다.

2
+1. 이것이 가장 좋은 방법입니다. 상당히 기본적인 물리 방정식조차도 그리스 문자, 근, 부분 도함수, 연산자 (Laplace, Hamilton), 벡터, 텐서 등을 사용할 수 있으므로 일반적으로 주석에서 공식을 적법하게 표현할 수 없습니다. 가능한 표준 변수 이름 / 약어를 고수하고 (예 : 표준 변수 이름 GAS_CONSTANT아닙니다 . 내가 사용 R하는 모든 교과서 ) 주석에서 간단히 설명하는 것이 가장 좋은 방법입니다.
Joonas Pulakka

7

그냥 버리고 또 다른 옵션이 있습니다.

Volume ComputeVolume(Pressure p, Moles m, Temperature t) { ... }

이는 F #과 측정 단위의 기능과 다소 유사하며 실수로 압력을 온도로 대체하는 등의 문제를 피할 수 있다는 이점이 있습니다. 서명이 어디에있을 때 어떤 인수를 가야하는지 시인하기가 어렵습니다 (더블, 더블, 더블)


분명히하기 위해, 이런 종류의 차원 분석을 수행 할 수있는 언어가 있습니까? 즉, 예를 들어 압력과 체적 사이의 제품을 에너지 단위에 할당 할 수 있다는 것을 알고 있습니까?
lindelof

예, F #은 측정 단위로이 작업을 수행합니다. msdn.microsoft.com/ko-kr/library/dd233243.aspx
Mathias

단위 간 자동 변환을 지원하지 않더라도 Money 클래스와 같은 특정 단위에 대한 전용 유형을 정의하는 것이 좋습니다. 의도하지 않은 변수 할당 및 변환 실수를 제한하고 리팩토링에 도움이됩니다.
Mathias

이것은 C ++ 템플릿으로 매우 강력하게 수행 할 수 있습니다.
케빈 클라인

@lindelof : C ++로이 기능 중 일부를 달성 할 수 있습니다typedef
Jacob

7

나는 이것을 선호한다 :

/* This function calculates volume using the following formula:
 *
 *     n * R * T
 * v = ---------
 *         P
 */
double volume(double pressure, double n_moles, double temperature) {
    return n_moles * BOLTZMANN_CONSTANT * temperature / pressure;
}

다시 말해, 주석에서 코드의 의미를 영어로 설명하고 (수학 : 주석이므로 필요한만큼 확장 할 수 있음) 설명 변수 이름을 사용하여 유일한 코드를 읽는 사람은 여전히 ​​이해할 수 있습니다. 더 큰 기능을 사용하면 쉽게 할 수 있습니다. 실제 단어를 변수 이름으로 사용하는 또 다른 이유는 함수 선언을 헤더 파일에 복사 해야하는 경우 인터페이스가 훨씬 명확하기 때문입니다.


2
또한 수식에 대해 이야기하는 인터넷 어딘가에 대한 링크를 포함하는 의견에 좋을 것입니다 (예 : en.wikipedia.org/wiki/Ideal_gas_law ).
Chris Shaffer

이것은 매우 좋은 접근 방법이지만 약간 지저분합니다. 나는 이상적인 가스 법칙을 설명하는 위키피디아에 대한 링크를보고 싶을 것이다.
Patrick87

3

IMHO 기능이 매우 도메인별로 고유 한 경우 작업중인 문제 도메인의 기존 표기법을 사용하는 것이 좋습니다. 문제 도메인을 이해하지 못하는 사람은 코드를 성공적으로 유지할 가능성이 없으며 도메인에 익숙한 사람에게는 긴 이름이 소음이 많고 입력이 더 많아 질 것입니다.

OTHO, 나는 전통적인 수학적 표기법이 때때로 더 장황하고 서술 적이기를 원하지만, 수학적 코드가 수학적 규칙을 고수해야한다고 생각합니다.

편집 :이 답변은 수식을 수학적으로 작성할 때 표기법에 대한 매우 강력한 규칙이있는 경우에만 적용됩니다. 하나가 없으며 독자가 도메인에 익숙하다고 가정하더라도 변수가 주석에서 나타내는 내용을 설명 해야하는 경우 더 설명적인 규칙의 측면에서 오류를 범하는 것이 가장 좋습니다.


2

순수한 의견이지만 항상 단일 문자 기호 위에있는 단어를 사용하십시오. 단어를 사용하면 모든 사람들이 이해할 것입니다. 기호를 사용하는 경우 주제 전문가 만 따라야합니다. 그럼에도 불구하고 일부 사람들은 동일한 물리량에 대해 다른 기호를 사용합니다. 더 긴 이름을 사용하면 잃을 것이 없습니다.


2

귀하의 우려는 명확하고 정확한 것이어야합니다 (올바르지 않지만 명확한 코드는 쉽게 수정됩니다). 따라서 가능한 한 일반 코더가 유지 보수 할 수 있도록 함수를 작성해야합니다. 함수 헤더 주석은 공식과 사용법을 설명하고 입력 / 출력 매개 변수를 설명해야합니다. 그런 다음 함수 본문이 레이아웃되는 방식은 헤더 주석과 일치하는 한 크게 중요하지 않아야합니다.

(이것은 토론이 아니라는 것을 알고 있지만-개인적인 선호는 변수에 명시적인 이름을 부여하는 것이지만,이 경우 하나의 라이너는 '순수한'기능이므로 충분할 수 있습니다. 동일한 매개 변수를 사용하면 동일한 결과를 얻을 수 있습니다 항상 결과이므로 설명이 필요한 상태 관련 복잡성이 없어야 함)

  • 차원 분석을 지원하는 다른 언어와 마찬가지로 C ++에서 템플릿을 사용하여 구현할 수 있으며 Boost Units 라이브러리는 내가 생각하는이 접근법을 사용합니다.

1

코드가 비즈니스 계층에서 얼마나 "멀리 떨어져"있는지에 따라 ... 코드가 쌓여있는 furthur는 코드가 추상적 인 수학 함수를 구현할수록 더 많이 타겟팅 될수록 일반적으로 수용되는 것을 더 모방하려고합니다. matehmatical 표기법 및 명명 규칙. 프런트 엔드 또는 비즈니스 계층에 가까울수록 문제 영역에서 설정된 규칙을 더 많이 준수합니다.


1

나는 이것을 이런 식으로 생각하고 싶다- 수학자들은 짧은 변수로 틀렸고 물리학 자들은 그에 따라 행동했다 . 왜 실수를 반복합니까? 이름이 길수록 설명하기 쉽고 혼동이 줄어든다는 사실을 알았습니다. 더 가벼운 말로, 때로는 더 긴 변수를 수학에 몰래 넣으려고합니다.


당신은 이것을 좋아할 것입니다 ...

0

프로그래밍 방정식의 올바른 형식은 6 개월 동안 보지 못한 후에도 여전히 이해하는 형식입니다.

다시 오면 :

n*R*T/P;

그리고 당신은 무슨 일이 일어나고 있는지 알면 아마 괜찮을 것입니다. 일반적으로 고급 수식의 경우 적극적으로 사용하지 않으면 각 부분이 무엇인지 기억 하지 못합니다 . 나를 위해 :

n_moles * BOLTZMANN_CONSTANT * temperature / pressure;

수식이 쓰여져 있는지 알 필요가 없더라도 각 부분을 쉽게 이해할 수 있기 때문에 특히 더 나은 수식 형식 입니다.


당신은 energy_in_joules = mass_in_kilograms이 * 펑 (speed_of_light_in_vacumm_in_metres-per_second, 2) 쉽게 생각 E = MC ^ 2 이상
마틴 베켓

@Martin Beckett, 실제로 내가 올린 글을 읽었 습니까? "일반적으로 고급 포뮬라의 경우 적극적으로 사용하지 않으면 각 부분이 무엇인지 기억 하지 못합니다 ." 나는 공개 지식으로 자신을 밀어 붙인 방정식을 잊을 것이라고 말하지 않았다. 의 경우처럼 E=m*(c^2)나는 6 개월을 이해합니다.
zzzzBov

잘 알려진 고전 방정식의 경우 일반 표기법을 사용하는 것이 좋습니다. 도메인에서 사용되는 변수 이름 세타 또는 파이의 이름까지도
Martin Beckett

-1

동전을 던져.

또한 코딩 자체에 쓰는 것보다 변수 이름을 지정하는 방법에 대해 더 많은 시간을 할애합니까?


6
예, 일반적으로 코드를 코딩하는 것보다 코드를 디자인하는 데 더 많은 시간을 소비하며 문제를 이해하고 올바르게 이름을 지정하는 것으로 시작합니다.
Mathias
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.