Seongsiks

Being A DevOpser. Powered by
Obtvse, highlight.js, theme toc Creative Commons License
Seongsiks Twitter Github Email
DevOps Ruby On Rails Chef Projects Misc Movies & Drama ME

CoffeeScript Basic Syntax

Overview

커피스크립트의 기본적인 문법 정리

커피스크립트 기본 특성

  1. "var 변수" 이런식으로 변수를 선언할 필요가 없다.
  2. 세미콜론을 사용하지 않는다.
  3. 들여쓰기로 코드블럭을 구분한다.
  4. 함수의 마지막 라인은 항상 리턴된다.
  5. 함수를 호출할때 괄호를 생략할 수 있다.

자 여기에 더 아름다운 특성들이 있으니 살펴 봅시다.

Function Declaration

함수 선언

# var coffee = function(){
#     return alert("This is Javascript");
# } 
coffee = ->
  alert "This is Javascript"

함수 파라미터

 # var coffee;
 # coffee = function(message) {
 #   var favorite;
 #   favorite = confirm(message);
 #   return "My favorite Coffee is "+ favorite;

 coffee = (message) -> 
   favorite = confirm(message)
   "My favorite Coffee is #{favorite}"

함수 기본 값 설정 파라미터가 안주어 졌을때 기본값을 설정할 수 있음!!

 coffee = (message="Hello") -> 
   favorite = confirm(message)
   "My favorite Coffee is #{favorite}"

Splat

  searchLocations = (brand, cities...) ->
    "looking for #{brand} in #{cities.join(',')}"

문법

jQuery

jQuery랑 CoffeeScript 같이 쓰기

# jQuery(function($){
# });
$ ->

# $(this).addClass("active");
$(@).addClass "active"

# $("#tabs #error a").click(function (e){
#   e.preventDefault();
# });
$("#tabs #error a").click (e) ->
  e.preventDefault()

조건문

alert 'Under age' if age < 18
if age < 18 then alert 'Under age'
alert "Under age" unless age > 18
if 2 < newLevel < 5
   alert "In Range!"

스위치(switch)

  message = switch cupsOfCoffee
    when 0 then 'Asleep'
    when 1 then 'Eyes Open'
    when 2 then 'Buzzed'
    else 'Dangerous

존재 확인

이것 정말 좋은듯 합니다. 자주 쓰는건데 번거로왔는데, 좋네요.

# if (typeof cupsOfCoffee !== "undefined" && cupsOfCoffee !== null) {
#   alert('it exists!');
# }
if cupsOfCoffee?
  alert 'it exists!'

#메소드가 있을때만 실행
vehicle.start_engine?().shift_gear?()

Ranges

CoffeeScript를 살펴보다보니 CoffeeScript가 ruby에 영향을 많이 받았다는것을 느낄 수 있었습니다. Range도 ruby에서 영감을 얻은 것 같은데요.(확인된 사실은 아님)

range = [1..4] #=> [1, 2, 3, 4]
range = [1...4] #=> [1, 2, 3]
range[1..-1] # range의 길이에 상관없이 전체

array에서 " , " 콤마를 생략할 수 도 있음!!

List comprehension

#마치 ruby의 map과 같은 기능
newLocations = ("Location: #{location}" for location in storeLocations when loc isnt 'Sanford')

Object

coffee = 
  name: 'French' 
  strength: 1
  brew: -> alert("brewing #{@name}") # @는 this

Class

# 키워드 class를 사용하고 대문자로 시작
# extends 키워드로 상속 받을 수 있음.
class MaxgoodHouse extends Coffee
  # constructor 키워드로 init메소드 생성
  # @this로 인스턴스 변수를 할당할 수 있음
  constructor: (@name, @strength=0) ->
    @brand = "Maxgood House"

  brew: -> alert "Brewing #{@brand} #{@name}"

  pour: (amount=1) ->
    "#{super(amount)}, but it sucks"

  pourClick: ->
    # =>를 사용하면 @name과 function안쪽에 @inventory가 같은 this 도메인을 가지도록 해준다. 
    $("#pour-#{@name}").click (event) =>
      if @inventory isnt 0
        @inventory -= 1
        alert "Poured a cup of #{@name}"
comments powered by Disqus
Back to Misc