삼진법이 없는 이유는 무엇입니까?

2399 단어 ternarygo
내가 Go에 대해 가장 그리워하는 것 중 하나는 삼항이 이미 잘 확립된 PHP와 노드에서 온 삼항입니다. IF, Else 및 스위치. "큰 힘에는 큰 책임이 따른다"는 만화의 유명한 인용문과 같습니다.

Go와 Ternary에 대한 논의는 새로운 것이 아니며, 주제에 대한 많은 문제가 있습니다. 당신이 탐구할 수 있도록 그녀의 출처를 남겨둘 것입니다. 양쪽에서 가장 중요하다고 생각하는 요점을 요약하겠습니다. 그리고 개인적인 결론을 내립니다.

이익



1) 사용 라인 코드를 대폭 줄입니다.

var n T
if expr {
    n = trueVal
} else {
    n = falseVal
}



var n = expr ? trueVal : falseVal


2) 문제가 sumbols인 경우 ? , : . = , 파이썬에서도 접근할 수 없는 접근 방식은 매우 흥미로울 수 있습니다.

x := "yes" if true else "no"


3) Go의 예제 기반인 C 및 C++와 같은 언어에는 삼항이 있습니다.

4) 값이 할당되지 않은 경우 기본 값을 필요로 하는 변수(예: 서비스 포트).

단점



1) 검증할 표현식이 둘 이상인 경우 삼항 연산을 읽기 어렵고 완성도를 결정할 수 없게 됩니다.

var b1, b2, b3 bool
...
var s = b1 || b2 ? b2 && b3 ? b1 && b3 : "s1" : "s2" : "s3": "s4"


2) IF, ELSE 및 Switch와 같은 연산으로 대체할 수 있습니다.

3) 구문과 관련하여 명확성과 단순성이라는 Go의 목표에서 벗어납니다.

결론



3진법은 1.20버전까지는 안나오고(현재는 1.19임) Go 2버전에 나올지 논의가 되지만 좀처럼 오지 않는 현실은 내가 보는것과 과반수로 나뉘어 있음에도 불구하고 전달한다. 더 많은 코드 줄이 필요하더라도 구문의 단순성을 유지해야 하는 방어.

의사 소통의 가장 큰 두려움은 더 복잡한 코드를 만드는 것입니다. 저는 개인적으로 개발자와 팀이 가장 좋은 작성 방법을 선택하는 자율성을 선호합니다. 한 줄만 사용하는 것이 더 합리적이기 때문에 한 가지 옵션이 더 좋을 것입니다. 적어도 3을 사용하는 것보다.

정말 필요한 경우 Go에서 삼항을 생성하거나 다른 언어에 있는 패키지와 매우 가깝게 두는 패키지가 있습니다(예: ternary). 논리적으로 Github 주변에 다른 패키지가 흩어져 있어야 합니다.

출처


  • Issue 20774
  • Issue 31659
  • Issue 33171
  • Go Doc
  • Github Ternary
  • 좋은 웹페이지 즐겨찾기