매일매일 IT
CoffeeScript 본문
- 커피스크립트는 실행할 때 자바스크립트로 변환되어 실행.
- 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과 동일하게 계층적으로들여 써서 중첩 객체를 표현할 수도 있다.
- 연산자
- 자바스크립트와 비슷하지만, 추가적으로 존재
- 요기서 유의해야 하는 점은 커피스크립트의 비교 연산자 ==가 자바스크립트의 ===로 변환된다는 것
- 자바스크립트의 ===는 엄밀한 비교를 의미. 변수의 값 뿐만 아니라 타입도 일치해야 true가 된다.
CoffeeScript |
JavaScript |
example |
is |
=== |
a is "toadstool" |
isnt |
!== |
a isnt "toadstool" |
not |
! |
not true |
and |
&& |
a and b |
or |
|| |
a or b |
- 범위 비교
- 자바스크립트 : 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'와 같다.
- 커피스크립트는 컴파일 후의 소스코드가 보기 쉽다!
- 커피스크립트를 통해 오히려 자바스크립트 문법의 이해를 넓힐 수도 있다....고한다.
'Programming Language > JavaScript' 카테고리의 다른 글
[NodeJS PDFKit] PDFKit 라이브러리로 PDF 만들기 (2) | 2017.07.25 |
---|---|
[NodeJS PhantomJS CasperJS] HTML 파일을 PDF로 변환 (0) | 2017.07.25 |
String.replace() 메소드 (0) | 2017.07.20 |
String.search() 메소드 (0) | 2017.07.20 |
String.match() 메소드 (0) | 2017.07.20 |
Comments