CoffeeScript의 3 차 작업


318

a조건에 따라 값을 설정해야합니다 .

CoffeeScript로 가장 짧은 방법은 무엇입니까?

예를 들어 이것이 JavaScript에서 수행하는 방법입니다.

a = true  ? 5 : 10  # => a = 5
a = false ? 5 : 10  # => a = 10

120
<rant> 커피 스크립트가 삼항 연산자 구문을 지원했을 수 있기를 바랍니다. if else then </ rant> 보다 짧고 읽기 쉽습니다.
AJP

2
@ AJP 루비가 가지고 있지만 3 차가 커피를 루비처럼 덜 만들 것이라고 생각합니다. 커피의 목표는 항상 가독성과 거친 모서리를 반올림하는 것입니다.
jcollum

37
@jcollum 동의하지만, 정말 대부분의 불안 IS를 찾을 것 a = true ? 5 : 10유효 커피 스크립트이지만, (자바 스크립트) 삼항 구조, 대신를 의미하는 것은 아니다는 의미 a = true ? true : {5:10}또한 thing® 나쁜로 알려진 a = false ? {5 : 10}입니다 (자바 스크립트) 다음 커피 스크립트에서 동등한 a = true ? false : {5:10} 가치 : 나는 그것이 가치 있다고 생각하지 않습니다.
AJP

2
CoffeeScript의 경우 그 외의 내용을 철자하는 것이 최선일 수 있습니다. ? 존재 연산자로서 많은 의미가 있습니다 : beast = yeti ? "bear"또는 꽤 잘 if yeti? then alert "It's a yeti!"사용합니다 ?.
Paul Oliver

3
CoffeeScript에서는 별도의 삼항 연산자가 실제로 필요하지는 않지만 if/then/else이미 표현식이므로 동일한 작업을 수행합니다. 실제로 누락 된 경우 실제로 필요한 것보다 C 또는 JavaScript 구문에 익숙합니다. 충분히 읽을 수없고 때때로 발생하는 경우 전체 표현식을 괄호로 묶기 만하면됩니다. 운영자는 ?이미 @PaulOliver에 의해 진술 자바 스크립트에 결석 더 유용한 검사, 아끼지되었습니다. 기존 연산자가 최고입니다.
skalee

답변:


544

모든 것이 표현식이므로 결과가되므로을 사용할 수 있습니다 if/else.

a = if true then 5 else 10
a = if false then 5 else 10

식 예제에 대한 자세한 내용은 여기를 참조 하십시오 .


8
커피 스크립트가 자바 스크립트 기본 3 진 구문을 지원하지 않는 이유가 있다고 생각합니까?
Augustin Riedinger

41
그 이유는 "암호가 적고"임의적이지 않은 (예 : github.com/jashkenas/coffeescript/issues/11#issuecomment-97802 ) 제작자가 선호하는 것 입니다. [My 2 cents-? :의 임의성을 인식하는 동안 if..then..else간결한 표현으로 간주되는 것을 대체하는 것이 장황 하다고 생각 합니다. 그리고? : 결국 많은 언어들 사이에 매우 뿌리 깊은 표준이 있습니다. 이 모든 것에도 불구하고, 그것은이 단계에서 돌로 세워진 것 같습니다.]
mahemoff

1
나는 CoffeeScript 저자와 동의합니다. 저는 항상 삼항 구문이 추악하고 직관적이지 않은 AF라고 생각했습니다. if then else같은 줄에서 사용할 수 있다면 , 훨씬 더 명확하고 우아하게하기 위해 7 개의 추가 문자가 있습니다.
Joshua Pinter

취향에 따라 다르지만 ->over function또는 { }over 과 같은 키워드보다 기호보다 기호를 선호 begin .. end합니다. 단어가 기능별 논리를 위해 예약되어 있고 운영 논리가 대부분 강등되는 신호 대 잡음비가 높기 때문에 기호에.
mahemoff

표준 교차 언어 구조를 제거하는 전체 드라이브는 특히 pug와 같은 다른 '유용한'항목을 추가 할 때 유지 관리를 수행하는 사람들을 조여줍니다 ... 모든 인수 시퀀스와 유령 괄호를 추론 할 수없는 경우 ...
Grunion Shaftoe


21

거의 모든 언어에서 대신 작동해야합니다.

a = true  && 5 || 10
a = false && 5 || 10

38
이것은 효과가 있지만 훨씬 명확하지 않으며 구문이 더 나은 언어로 할 이유가 없습니다.
이브라힘

10
false0, null, undefined 등의 값으로 암시 적으로 변환되는 많은 언어에서는 동일하지 않습니다 .
Lord of the Goo

12
@Ibrahim 이것은 마크 뒤 부분 이 진실한 경우 에만 조건부 3 진으로 작동합니다 &&. 그렇지 않으면 마지막 부분을 반환하지만 조건부 3 진이 작동하는 방식이 아닙니다.
pepkin88

정확하게 차이! :)
Pierre Voisin

공간은 항상 공백이없는 커피 스크립트 (또는 루비) 등의 espeically에 lanugage - 모든 예제의이 내가 어떤 변수가 어떤 주어진 언어에있는 I가 건너 올 수도에게 가장 까다로운 찾을 것 하나입니다
토니 리

12

Coffeescript 자바 스크립트 삼항 연산자를 지원하지 않습니다 . 커피 스크립트 작성자 의 이유는 다음과 같습니다 .

나는 다음 사람과 마찬가지로 삼항 연산자를 좋아하지만 (실제로는 조금 더) 구문이 좋지 않습니다. 한 줄에 if / else를 넣을 수 있기 때문에 훌륭합니다. 표현.

그들의 문법은 언어의 다른 어떤 것과도 유사하지 않은 암기 할 수있는 또 다른 신비로운 마법입니다. 결과가 동일하고, 나는 if/elses항상 항상 똑같아 보였으며 항상 표현으로 컴파일되었습니다.

따라서 CoffeeScript에서는 else 절이없는 if 문과 마찬가지로 여러 줄 ifs조차도 적절한 경우 삼항으로 컴파일됩니다.

if sunny   
  go_outside() 
else   
  read_a_book().

if sunny then go_outside() else read_a_book()

둘 다 삼항이되고, 둘 다 표현식으로 사용될 수 있습니다. 일관성이 있으며 배울 새로운 구문이 없습니다. 제안 해 주셔서 감사하지만이 티켓을 "wontfix"로 마감합니다.

github 문제를 참조하십시오 : https://github.com/jashkenas/coffeescript/issues/11#issuecomment-97802


3

주로 사용되는 경우 두 문장으로 작성할 수도 있습니다.

a = 5
a = 10 if false

또는 더 많은 가능성이 필요한 경우 switch 문을 사용하십시오.

a = switch x
  when true then 5
  when false then 10

부울을 사용하면 크기가 커질 수 있지만 매우 읽을 수 있습니다.


1

여러 줄 버전 (예 : 각 줄 뒤에 주석을 추가해야하는 경우) :

a = if b # a depends on b
then 5   # b is true 
else 10  # b is false

0

CoffeeScript삼항 연산자가 없습니다. 그것이 문서에서 말하는 것입니다.

여전히 같은 구문을 사용할 수 있습니다

a = true then 5 else 10

훨씬 더 명확합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.