매일매일 IT

CoffeeScript 본문

Programming Language/JavaScript

CoffeeScript

Teeeeeeemo 2017. 7. 24. 16:22
  • 커피스크립트는 실행할 때 자바스크립트로 변환되어 실행.
  • js 보다 간결, 가독성이 뛰어남.
  • npm 이용하여 설치 가능 
  • $ sudo npm install -g coffee-script

  • test-sum.coffee



  • 실행법 : $ coffe test-sum.coffee
  • 명시적 자바스크립트 변환 명령어 : $ coffee -c test-sum.coffee

  • 자바스크립트로 컴파일된 test-sum.js

  •  CoffeeScript 기본 문법 
    • 문장 끝에 세미콜론(;) 必要ないです。
    • console.log "Hello, Teemo~"
    • 다만, 여러 문장을 하나의 행에 쓰고자 할 때는 세미콜론을 사용하여 글 구분하여야 한다.
    • console.log "Hello, Teemo~"; console.log "Like teemo!!!"
    • 함수나 메소드의 인자를 지정할 때 괄호(...) 가 필요 없다.
    • console.log Math.floor 3.15
    • 괄호는 쓰지 않아도 되지만, 인자의 대응 관계가 불분명하게 되는 경우에는 명시적으로 괄호로 감싸는 것이 좋당.
    • console.log( Math.floor(3.15) )

  •  주석 처리
    • # 한 줄 주석 처리
    • ### 여러 줄 주석 처리 ###
    • 한 줄 주석 처리는 컴파일 시 삭제되고, 여러 줄 주석 처리는 생성된 자바스크립트에 그대로 남아 있게 된다.
    • 때문에 파일의 선두에 라이센스 정보 등을 기재하고 싶은 경우에는 여러 줄 주석 처리 사용 ! 

  •  제어 구문은 들여쓰기로 레벨 명시
    • if/switch/for/while 등의 제어 구문
    • 자바스크립트와 달리 들여쓰기로 블록 표현~

  •  변수 선언
    • 자바스크립트에서는 변수 선언 시 var 키워드 사용해야 하는데 커피스크립트에서는 필요 없다.
    • 값을 처음 할당한 곳에서 변수 생성되고, 범위가 결정된다.
    • age = 30;

  •  문자열 
    • 문자열 리터럴은 큰따옴표("...") 혹은 작은따옴표('...')로 감싸 표현.
    • 큰따옴표로 둘러싼 문자열에는 그 안에 변수를 넣을 수 있다. 



    • 여러 라인에 걸쳐 문자열을 정의하는 데 편리한 heredoc도 준비되어 있다.   
      • PHP HEREDOC ? 
        • 개행, 공백, 역슬래시 등이 그대로 보존되어 변수로 들어감
        • 단, $를 만나면 변수로 해석함 ( 예: $greeting ) ★
        • 이스케이프 하려면 역슬래시를 붙여야 함 ( 예: \$greeting )
          • 첫번째와 마지막 개행( 예: <<<EOT, EOT )은 무시됨
          • 변수를 사용하지 않는다면 PHP 나우닥을 권장
    • 안에서 변수를 사용할 수 있는 """..."""과 사용할 수 없는 '...' 두 종류! 
    • str-hdoc.coffee


    • 아래 결과를 보면 heredoc의 각 라인 시작 부분의 공백이 적절히 처리되었음을 알 수 있다.

    • 또한, 문자열 중의 #{변수명}에 변수의 값이 표시되었다.



  •  Boolean
    • true/false 외에도 on/off, yes/no 사용 가능.
    • 문맥에 따라 적절히 사용하면 프로그램의 가독성이 높아질 것이다.

  •  배열
    • 배열과 객체를 사용할 때 자바스크립트에서와 같이 배열은 [...], 객체는 {...}로 표현할 수 있다.
    • 다만, 배열의 요소 구분자로 "," 뿐만 아니라 개행도 사용 가능.
    • 또한, 마지막 요소가 쉼표로 끝나지 않아도 에러가 되지 않는다.
    • YAML과 동일하게 계층적으로들여 써서 중첩 객체를 표현할 수도 있다.




  •  연산자 
    • 자바스크립트와 비슷하지만, 추가적으로 존재
    • CoffeeScript 

      JavaScript 

      example 

      is 

      === 

      a is "toadstool" 

      isnt 

      !== 

      a isnt "toadstool" 

      not 

      not true 

      and 

      && 

      a and b 

      or 

      || 

      a or b 

    • 요기서 유의해야 하는 점은 커피스크립트의 비교 연산자 ==가 자바스크립트의 ===로 변환된다는 것 
    • 자바스크립트의 ===는 엄밀한 비교를 의미. 변수의 값 뿐만 아니라 타입도 일치해야 true가 된다.

  •  범위 비교
    • 자바스크립트 : 10<=x && x<=30
    • 커피스크립트 : 10<=x<=30
  •  변수의 존재 체크
    • 변수가 정의되었는지 여부를 조사하는 데 '?' 연산자 사용 가능 
    • 이는 변수가 정의되었고 null 이 아닌지 확인한다.
    • check.coffee



    • '?' 연산자를 사용하여 변수가 정의되지 않은 경우 기본 값을 할당할 수 있다.
    • value = sval ? 100
    • 함수와 메소드를 호출하는 경우에도 존재 연산자 사용 가능.
    • # 함수가 존재하면 실행
    • console.log func?()
    • # 객체 obj가 존재하는 경우만 price에 엑세스
    • console.log obj?.price
    • CoffeeScript에서는 '?'이 존재 연산자로 쓰이고 있어 JavaScript에서처럼 조건 연산자로 사용 불가.

  •  연속하는 수치의 표현 - 범위 연산자 '..'
    • 범위 연산자 'n..m'을 통해 수치 배열을 간편하게 생성할 수 있다.
    • 'n...m'(점이 세 개)는 끝 값이 제외된다.
    • # 1부터 10의 값을 생성하는 경우 
    • range=[1..10];
    • # 1부터 9까지의 값을 생성하는 경우
    • range=[1...10];
  •  제어 구문
    • 커피스크립트의 제어 구문 블록은 들여쓰기로 표현한다.
    • if..else..
      • 들여쓰기를 써서 조건 분기를 간단히 기술할 수 있다.


      • 후치 형식의 if도 가능 
    • if..then..else
      • 또한, 한 라인에서 if 구문을 사용할 때에는 then을 사용하여 자바스크립트의 삼항 연산자처럼 쓸 수 있다.

    • unless
      • unless 구문은 조건식이 false인 경우에 블록을 실행한다.




    • switch..when..else
      • 식의 값에 따라 처리를 분기하는 switch 구문
      • JavaScript의 switch와 다른 점은 case 대신 when을 사용, default 대신 else 사용.
      • when에는 쉼표로 하나 이상의 값을 지정할 수 있다.
      • 조건의 실행 블록을 빠져나가기 위한 break는 불필요.
      • 다음 when에서 자동으로 빠져나간다. 



    • while/until
      • 조건식이 true 인 동안 반복해서 블록을 실행하는 것이 while 구문.
      • 조건식이 false 인 동안 반복하는 것이 until 구문.



    • for..in/for..of
      • for..in : 배열에서 값을 차례로 꺼내서 특정 처리 반복
      • for..of : 객체에서 값을 차례로 꺼내서 반복 처리



      • 자바스크립트의 for..in 구문에서는 반복자의 변수에 요소의 인덱스가 대입되는 데 반해 커피스크립트에서는 요소 자체가 대입되므로 편리하다.
      • 요소의 인덱스 번호가 필요한 경우에는 'for value, index in 배열' 과 같은 형식으로 기술하면 된다. 




    • 객체의 각 키, 값 요소에 대한 반복처리를 하는 for..of 구문




  •  함수 작성 
    • (인자 1, 인자 2, ... ) -> 식
    • return 을 기술할 필요 없이 마지막 식이 반환 값이 된다.
    • 간단 곱셈 함수 



    • 제곱을 계산하는 x2와 네제곱을 계산하는 x4 함수 




    • 인자가 없는 함수인 프로시저를 작성하는 경우에는 (인자) 부분을 생략할 수 있다.
    • 그러나 함수를 호출할 때는 함수 이름 뒤에 ()가 필요하다.
    • 또한, 반환 값이 없는 경우에는 return문 만을 기술하면 된다.




    • 인자의 기본값을 지정할 수 있다.




    • 가변 길이 인자 
      • 함수를 정의할 때 인자의 끝에 '...'를 기술하면 가변 인자를 지정할 수 있다.
      • 가변 길이 인자는 배열의 형태로 취급된다.




    • 무명 함수(익명 함수)
      • '(인자)->' 형식으로 기술할 수 있다.
      • 다음 예제는 정기적으로 콜백 함수를 실행하는 setInterval() 함수 사용 예다. 
      • 1초마다 무명 함수의 형태로 지정한 콜백 함수가 실행된다.



  •  객체지향
    • 자바스크립트도 객체지향 언어이지만, 프로토타입 기반이라 약간 낯설다.
    • 커피스크립트에서는 일반적인 객체지향 언어처럼 클래스를 정의할 수 있다. ( 커피스크립트의 큰 장점 중 하나 ~ )
    • 클래스 정의




    • 상속




    • 정적 멤버 
      • 정적인 클래스 메소드나 속성을 정의하려면 '@속성' 처럼 이름 앞에 '@' 기술한당.



    • 멤버를 동적으로 추가 
      • 기존 클래스에 동적으로 멤버를 추가할 수 있다.
      • 클래스 이름::멤버 = 값
      • Animal::food = "Pet food"
      • 커피스크립트의 '@' 는 자기 자신을 의미하는 keyword이며, 자바스크립트의 'this'와 같다.

    • 커피스크립트는 컴파일 후의 소스코드가 보기 쉽다!
    • 커피스크립트를 통해 오히려 자바스크립트 문법의 이해를 넓힐 수도 있다....고한다.



Comments