커피 스크립트
CoffeeScript![]() | |
패러다임 | 멀티패러다임: 프로토타입 기반, 기능, 필수, 스크립트 |
---|---|
설계자 | 제레미 애슈케나스 |
개발자 | 제레미 애슈케나스 |
처음 등장한 | 2009년 12월 13일, | 전(
안정된 릴리스 | 2.6.1[1] / 2021년 10월 ; 전 ( ) |
타이핑 분야 | 동적, 암묵적 |
OS | 크로스 플랫폼 |
면허증. | MIT 라이선스 |
파일 이름 확장자 | .coffee ,.litcoffee [필요한 건] |
웹 사이트 | coffeescript.org/,%20https://coffeescript |
영향을 받다 | |
Haskell, JavaScript, Perl,[citation needed] Python,[2] Ruby, YAML[3] | |
영향받은 | |
MoonScript, LiveScript, JavaScript |
CoffeeScript는 JavaScript로 컴파일하는 프로그래밍 언어입니다.JavaScript의 간결함과 [4]가독성을 높이기 위해 Ruby, Python, Haskell에서 영감을 받은 구문설탕을 첨가했습니다.특정 추가 기능으로는 목록 이해 및 할당 파괴가 있습니다.
CoffeeScript 지원은 Ruby[5] on [6]Rails 버전 3.1 및 Play Framework에 포함되어 있습니다.2011년 Brendan Eich는 CoffeeScript를 [7][8]JavaScript의 미래에 대한 자신의 생각에 영향을 미치는 것으로 언급했습니다.
역사
2009년 12월 13일, Jeremy Ashkenas는 "미스터리 [9]언어의 첫 번째 약속"이라는 코멘트와 함께 CoffeeScript의 첫 번째 Git 커밋을 했다.컴파일러는 루비로 작성되었습니다.12월 24일, 그는 태그 부착되고 문서화된 첫 번째 릴리스인 0.1.0을 만들었다.2010년 2월 21일, 그는 버전 0.5를 커밋하여 루비 컴파일러를 순수 CoffeeScript의 셀프 호스팅 버전으로 대체하였다.그 무렵 이 프로젝트는 GitHub에 여러 명의 다른 기고가들을 끌어들여 하루에 300페이지 이상의 조회수를 기록하고 있었다.
2010년 12월 24일, Ashkenas는 프로젝트가 처음으로 [10][11]발표된 사이트인 Hacker News에 안정적인 1.0.0의 릴리스를 발표했습니다.
2017년 9월 18일 버전 2.0.0이 [12]소개되었으며, 이는 "커피스크립트의 특징인 깨끗한 구문을 유지하면서 자바스크립트와의 호환성 격차를 좁혀 현대 자바스크립트 시대에 CoffeeScript를 도입하는 것"을 목표로 하고 있다.
구문
예를 들어 거의 모든 것이 CoffeeScript의 표현입니다.if
,switch
그리고.for
expressions(JavaScript에는 반환값이 없음)는 값을 반환합니다.Perl과 마찬가지로 이러한 제어문에도 다음과 같은 postfix 버전이 있습니다.if
로도 쓸 수 있다 consequent if condition
형태.
불필요한 괄호나 대괄호는 생략할 수 있습니다.예를 들어 코드 블록은 중괄호 대신 들여쓰기로 나타낼 수 있으며 함수 호출은 암묵적이며 객체 리터럴이 자동으로 검출되는 경우가 많습니다.
JavaScript에서 체질량 인덱스를 계산하려면 다음과 같이 쓸 수 있습니다.
컨스턴트 덩어리 = 72 컨스턴트 높이 = 1.78 컨스턴트 BMI = 덩어리 / 높이 ** 2 한다면 (18.5 <=> BMI & & BMI < > 25) { 경계.("건강하시군요!") }
CoffeeScript에서는 간격이 직접 설명됩니다.
질량 =72 높이 =1.78 BMI =덩어리 / 높이**2 경계. "건강하시군요!" 한다면 18.5 <=> BMI < > 25
유클리드 알고리즘을 사용하여 두 정수의 최대공약수를 계산하려면 JavaScript에서는 보통 약간의 루프가 필요합니다.
gcd = (x, y) => { 하다 { [x, y] = [y, x%y]; } 하는 동안에 (y !== 0) 돌아가다 x }
반면 CoffeeScript에서는until
[13] 대신:
gcd =(x, y) -> [x, y] = [y, x%y] 까지 y 이 0 x
그?
키워드는 변수가 다음과 같은지 여부를 빠르게 확인합니다.null
또는undefined
:
PersonCheck =-> 한다면 것은 아니다. 사람인? 그리고나서 경계.("아무도") 또 다른 경계.("사람이 있다") 사람 =무효 퍼스널 체크() 사람 ='아이반' 퍼스널 체크()
변수가 다음과 같은 경우 "No person"으로 경고합니다.null
또는undefined
'사람을 가져라' 이런 거 있잖아요.
jQuery 라이브러리를 사용하는 일반적인 es6 이전 JavaScript 스니펫은 다음과 같습니다.
$(문서).준비가 되어 있습니다!(기능.() { // 초기화 코드가 여기에 들어갑니다. })
또는 단순히:
$(기능.() { // 초기화 코드가 여기에 들어갑니다. })
CoffeeScript에서는function
키워드는,->
Python이나 Haskell과 같은 다른 오프사이드 규칙 언어에서와 같이 부호 대신 들여쓰기가 사용됩니다.또한 일반적으로 괄호는 생략할 수 있으며 대신 함수와 블록을 나타내기 위해 들여쓰기 수준을 사용합니다.따라서 위의 스니펫과 동등한 CoffeeScript는 다음과 같습니다.
$(문서).준비가 되어 있습니다! -> # 초기화 코드는 여기에 입력됩니다.
아니면 그냥:
$ -> # 초기화 코드는 여기에 입력됩니다.
Ruby 스타일의 문자열 보간은 CoffeeScript에 포함되어 있습니다.큰따옴표로 묶은 문자열에서는 #{...}을(를) 사용하여 보간 값을 사용할 수 있습니다.따옴표로 묶은 문자열은 [14]리터럴입니다.
작성자 =비트겐슈타인 견적 =사진은 사실이다.#{ 작가. }" 문장 ="#{ 22 / 7 }"의 근사치입니다.
임의의 for 루프는 목록 이해로 대체할 수 있습니다. 따라서 10보다 작은 양의 홀수(즉, 나머지 모듈로 2가 1인 수)의 제곱을 계산하려면 다음을 수행할 수 있습니다.
경계. n*n 위해서 n 에 [1..10] 언제 n%2 이 1
또는 다음과 같은 것이 있습니다.
경계. n*n 위해서 n 에 [1..10] 타고 2
선형 검색은 when 키워드를 사용하여 원라이너로 구현할 수 있습니다.
이름 =['아이반', '조안나', 니코레이, '미하라'] linearSearch =(search Name) -> 경계.(이름.) 위해서 이름. 에 이름 언제 이름. 이 검색명
그for ... in
구문을 사용하여 어레이를 루프할 수 있습니다.for ... of
구문을 사용하면 오브젝트를 루프할 수 있습니다.
CoffeeScript는 특이한 범위 지정 규칙으로 [15][16]인해 비판을 받아왔다.특히 절차적 프로그래밍 원칙이 정의된 이후 확립되고 당연시되는 일부 기본 프로그래밍 패턴에서 코드에 대한 추론을 더 어렵고 오류 발생 가능성이 높은 가변 쉐도우링을 완전히 거부합니다.
예를 들어, JavaScript에서 다음과 같은 코드 스니펫을 사용하는 경우, 이 코드 스니펫의 바깥쪽을 볼 필요가 없습니다.{}
- 불가능함을 확실히 알기 위해 차단합니다.foo
외부 스코프의 변수를 우발적으로 덮어쓸 수 있습니다.
// ... 기능. 바즈() { 변화하다 후우 = '바' 콘솔.로그.("후우 =${후우}`) } // ... }
CoffeeScript에서는 변수의 범위가 블록으로 제한되는지 여부를 블록 밖으로 볼 필요가 없습니다.
개발 및 배포
CoffeeScript 컴파일러는 버전 0.5 이후 셀프호스팅되어 Node.js 유틸리티로 사용할 수 있습니다.단, 코어 컴파일러는 Node.js에 의존하지 않고 어떤 JavaScript [17]환경에서도 실행할 수 있습니다.Node.js 유틸리티의 대안으로 Apache Maven 빌드 시스템용 플러그인인 Coffee Maven Plugin이 있습니다.플러그인은 [citation needed]Java로 작성된 Rhino JavaScript 엔진을 사용합니다.
CoffeeScript.org 공식 사이트에는 메뉴바에 "Try CoffeeScript" 버튼이 있습니다.이 버튼을 클릭하면 사용자가 CoffeeScript에 들어가 JavaScript 출력을 표시하고 브라우저에서 직접 실행할 수 있는 모드창이 열립니다.js2coffee[18] 사이트는 쌍방향 변환을 제공합니다.
최신 추가 정보
- 소스 맵을 사용하면 사용자가 직접 CoffeeScript 코드를 디버깅하여 런타임오류 발생 시 CoffeeScript 트레이스백을 지원할 수 있습니다.
- CoffeeScript는 다음을 사용하여 Literate Programming 형식을 지원합니다.
.coffee.md
또는.litcoffee
파일 확장자이를 통해 CoffeeScript 소스 코드를 Markdown으로 작성할 수 있습니다.컴파일러는 들여쓰기된 블록(Markdown의 소스 코드 표시 방식)을 코드로 처리하고 나머지는 코멘트로 무시합니다.
내선번호
Ice CoffeeScript는 CoffeeScript의 슈퍼셋으로, 다음의 2개의 새로운 키워드를 추가합니다.await
그리고.defer
. 이러한 추가 기능으로 비동기 제어 흐름이 간소화되어 코드가 절차 프로그래밍 언어처럼 보이게 되어 콜백 체인이 제거됩니다.서버측과 [19]브라우저에서 사용할 수 있습니다.
도입
2012년 9월 13일, Dropbox는 브라우저 측 코드 베이스가 JavaScript에서 [20]CoffeeScript로 다시 작성되었다고 발표하였으나,[21] 2017년에 TypeScript로 마이그레이션되었다.
GitHub의 내부 스타일 가이드는 "커피스크립트에 새로운 JS를 쓴다"고 말한 적이 있지만, 더 이상 그렇지 않으며,[23] 그들의 Atom 텍스트 에디터 또한 언어로 쓰여져 있다.
Pixel Game Maker MV는 게임 개발 환경의 일부로 [24]CoffeeScript를 활용합니다.
「 」를 참조해 주세요.
- Haxe
- Nim(프로그래밍 언어)
- 앰버 스몰톡
- 클로쥬르
- Dart(프로그래밍 언어)
- Kotlin(프로그래밍 언어)
- 라이브 스크립트
- Opa(프로그래밍 언어)
- Elm(프로그래밍 언어)
- 타입 스크립트
- PureScript
레퍼런스
- ^ "2.6.1". 4 October 2021. Retrieved 23 December 2021.
- ^ https://coffeescript.org/ "CoffeeScript는 Python에서 연쇄 비교를 차용합니다."
- ^ Heller, Martin (October 18, 2011). "Turn up your nose at Dart and smell the CoffeeScript". InfoWorld. Retrieved 2020-07-15.
- ^ Alex MacCaw (January 2012). The Little Book on CoffeScript. O'Reilly Media. ISBN 978-1-4493-2105-5.
- ^ Josh Peek (April 13, 2011). "Tweet by Rails Core Team Member".
- ^ "AssetsCoffeeScript - 2.5.x". www.playframework.com. Retrieved 2016-10-31.
- ^ 아이히, 브렌단'꿈의 조화'
- ^ 아이히, 브렌단"나의 JSConf.US 프레젠테이션"
- ^ Github. '미스터리 언어의 초기 커밋'
- ^ 해커 뉴스2010년 12월 24일 Jeremy Ashkenas가 게시한 CoffeeScript 1.0.0 발표
- ^ 해커 뉴스2009년 12월 24일 Jeremy Ashkenas가 게시한 오리지널 CoffeeScript 발표
- ^ coffeescript.org Coffee Script 2 발표
- ^ CoffeeScript는 이것을 "패턴 매칭"이라고 부릅니다.이것은 이 용어의 비표준적인 사용법입니다.
- ^ "Official CoffeeScript Page". Retrieved 20 November 2013.
- ^ "The Problem with Implicit Scoping in CoffeeScript". Retrieved 2018-10-13.
- ^ "CoffeeScript's Scoping is Madness". Retrieved 2018-10-13.
- ^ Wayback Machine에서 아카이브된 CoffeeScript 2012-04-27.Jashkenas.github.com 를 참조해 주세요.2013-07-21에 회수.
- ^ Sta Cruz, Rico. "js2coffee". Retrieved 11 May 2014.
- ^ "Official IcedCoffeeScript website".
- ^ Wheeler, Dan; Mahkovec, Ziga; Varenhorst, Chris (13 September 2012). "Dropbox dives into CoffeeScript". Retrieved 11 May 2013.
- ^ Goldstein, David (13 May 2020). "The Great CoffeeScript to Typescript Migration of 2017". Dropbox.Tech. Retrieved 30 June 2020.
- ^ "JavaScript · Styleguide · GitHub". Github.com. Archived from the original on 2013-08-15. Retrieved 2015-11-30.
- ^ Atom 소스 코드github.com 를 참조해 주세요.2021-06-26에 취득.
- ^ Cullen, Daniel. "PIXEL GAME MAKER MV (PC)". Christ Centered Gaming. Retrieved 15 January 2021.
추가 정보
- Lee, Patrick (May 14, 2014). CoffeeScript in Action (First ed.). Manning Publications. p. 432. ISBN 978-1617290626.
- Grosenbach, Geoffrey (May 12, 2011). "Meet CoffeeScript" (First ed.). PeepCode.
{{cite journal}}
:Cite 저널 요구 사항journal=
(도움말) - Bates, Mark (May 31, 2012). Programming in CoffeeScript (First ed.). Addison-Wesley. p. 350. ISBN 978-0-321-82010-5.
- MacCaw, Alex (January 31, 2012). The Little Book on CoffeeScript (First ed.). O'Reilly Media. p. 62. ISBN 978-1449321055.
- Burnham, Trevor (August 3, 2011). CoffeeScript: Accelerated JavaScript Development (First ed.). Pragmatic Bookshelf. p. 138. ISBN 978-1934356784.