2012-03-09 3 views
1

커피 스크립트로 바위 종이 가위 게임을 쓰고 있는데 기대했던대로 코드가 컴파일되지 않습니다.커피 스크립트 : if .. is .. then

커피 스크립트

if choice is opponent_choice then alert "Tie!" 

if (choice === opponent_choice) alert("Tie!"); 

로 컴파일하지만

if (choice === opponent_choice) { 
alert("Tie!"); 
} 

은 내가 생각했던 방식으로 컴파일이에 대한 변경해야 기다리고 있었다?

+4

두 비트의 코드는 동일합니다. 왜 당신은 특별히 후자를 필요로 하는가? – ruakh

+7

커피 스크립트를 소스로 사용하는 이유는 무엇입니까? 만약 당신이 컴파일 된 자바 스크립트에 대한 많은 통제를 원한다면 왜 자바 스크립트를 작성하지 않을까요? –

답변

16

한 줄에 하나의 명령문 만 있으면 중괄호가 필요 없습니다. 그것들은 기능적으로 동일하며 최소한의 문자를 사용하도록 출력을 최적화하는 coffeescript 컴파일러입니다.

4

왜 중요한가요? 로 컴파일

if choice is opponent_choice 
    alert "Tie!" 
    alert "Foo" 

: CS처럼 실제로 여러 줄 then이 필요 then 블록/멀티 라인 생성 할 수

당신의 기대를 변경

if (choice === opponent_choice) { 
    alert("Tie!"); 
    alert("Foo"); 
} 
3

을, 출력이 아닙니다.


편집 : 몇 가지 세부 사항

커피 스크립트는 좋은 도구, (그것이) 코드를 작성뿐만 아니라 짧은 방법입니다

을 추가 할 수 있지만 그것은 좋은 자바 스크립트로 많은 일반적인 패턴을-형식을 다시. 출력물은 종종 자바 스크립트로 직접 작성한 것보다 읽기 쉽지 않지만 선명도가 떨어지면 프로그래밍 패턴이 향상됩니다.

CoffeeScript는 원본으로 취급해야하며 컴파일 된 출력으로 처리하면 안됩니다. 다른 언어의 컴파일 된 출력을 편집하는 것을 꿈꾸지 않습니까? (나는 비유가 약간의 스트레치라는 것을 알고있다. 그러나 요점은 소스가 읽기/쓰기와 실행을위한 컴파일 된 출력을위한 것임).

0
// Generated by CoffeeScript 1.7.1 

나는이 버전의 커피를 사용하며 예상대로 컴파일 할 수 있습니다.

(function() { 
    if (choice === opponent_choice) { 
    alert("Tie!"); 
    } 

}).call(this); 

시도해 볼 수 있습니다. 그러나 컴파일 결과물에 너무 많은 관심을 기울이지 않는 것이 좋습니다. 그건 중요하지 않아.