CoffeeScript 速抄本

本文深入探讨了CoffeeScript编程语言的关键特性与实践应用,包括变量声明、函数定义、参数处理、数组与对象操作、字符串插值、模板字符串、模板语法、作用域、异常处理、数组操作等核心概念。此外,还涵盖了面向对象编程、模板变量和函数的使用、HTML与CSS整合、以及CoffeeScript与其他JavaScript库的交互。内容丰富,旨在为开发者提供全面的CoffeeScript编程指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CoffeeScript CheetSheet#

Declaration

there is no vars, and no need to add ';' and the end

i = 10
str = "hello world"
[firstName, lastName] = ["kang", "wang"]

define a function, no need to add the keyword 'function', -> is enough

fn = (param) -  ... 

Splats: define a function with multi parameters

fn = (parm1, parm1, params...) ->
    ...

params = ["value1", "value2", "value3", "value4"]
fn(params)
fn("value", params)
fn("value", "value", params)

define an Array

arr = [
   "element1"
   "element2"
]

define an object

obj = 
   first: 1
   second: 
      second_1: 1
      second_2: 2
   third: 3

$('.element').attr class: "active"

lexical scoping and variable safity.

outter = 10
scope = ->
   inner = 10

outter = 20 inner = 20

String Interpolation

mixin variable and function in string defination

str = "variable 1: #{var1}, function 1 returns: #{fn()}"

str = "
   today is Sunday
   so tomorrow is 
   Monday
"

htmlTpl = """
   <html>
      <body>
         <h1>Hello World</h1>
      </body>
   </html>
"""

Destructuring Assignment

[var1, var2] = [value1, value2]

use on object unapply

{firstName, lastName} = {firstName: "Kang", lastName: "Wang"}

use for a function multi-returns

location () ->   
   ["US", "LA", "Berkly"]

[county, province, city] = location() 
[start, end] = "hello, world".split ","

use to skip some useless bucket ...

[start, ..., end] = [1, 2, 3, 4, 5]

destructuring constructor

class Person
   constructor: (options) ->
   {@name, @age, @height} = options

tim = new Person age: 4

condition control

if else then

"do something" if true

if true and true 
   "do something"
else 
   "do other things"

if true then "do something" else "do other things"

for loop control

for loop while until

print ele for ele in [1, 2, 3, 4]

prints i, ele for ele in [1, 2, 3, 4]

print ele for ele in [1, 2, 3, 4] when ele / 2 != 1

countDown = (num for num in [10 .. 1] by 2)

loop an object

prints k, v for k, v of kid

print ele until ele > 10

print ele while ele > 10

do keywords

for filename in list
   do (filename) ->
      fs.readFile filename, (err, contents) ->
         compile filename, contents.toString()

for ele in [1, 2, 3, 4]
   do print ele

try .. catch .. expression

try 
	  fn(1)
catch error
	  error
finally
	  then

try .. catch .. expression

Array Operations

numSerials = [10 .. 0]

start = numSerials[0..2]

end = numSerials[0..-2]

end = numSerials[..]

umSerials[0..2] = [1, 2, 3]

use expression as much as possible

globals = (name for name of window)[0...10]

Existantial Operator ?, ?.

'?' means varaible is null or undefiend

solipsism = true if mind? and world?

speed = 0
speed ?= 15

footprints = yeti ? "bear"

'?.' usef for assessing object attribute

kid.brother?.sister

switch when else

 switch day
 	when "Mon" then ""
 	when "Tue" then ""
 	else "WTF"

 day = switch day
 	when "Mon" then ""
 	when "Tue" then ""
 	else "WTF"

object oriented

use => to bind this in scope

 Account = (customer, cart) ->
   @customer = customer
   @cart = cart
 
   $('.shopping_cart').bind 'click', (event) =>
     @customer.purchase @cart

 Account2 = (customer, cart) ->
   @customer = customer
   @cart = cart
 
   $('.shopping_cart').bind 'click', (event) ->
     @customer.purchase @cart

bind function to an exists function

Array::map = ->
   "..."

some sugar

chained comparasion

cholesterol = 127
healthy = 200 > cholesterol > 60

block regular expression

OPERATOR = /// ^ (
  ?: [-=]>             # function
   | [-+*/%<>&|^!?=]=  # compound assign / compare
   | >>>=?             # zero-fill right shift
   | ([-+:])\1         # doubles
   | ([&|<>])\2=?      # logic / shift
   | \?\.              # soak access
   | \.{2,3}           # range or splat
) ///

embeded javascript

fn = `function fn() {}`

operators and alias in CoffeeScript

CoffeeScript	             JavaScript
  is	                        ===
  isnt	                        !==
  not	                        !
  and	                        &&
  or	                        ||
  true, yes, on	                true
  false, no, off	            false
  @, this	                    this
  of	                         in
  in	                   no JS equivalent
  a ** b	               Math.pow(a, b)
  a // b	               Math.floor(a / b)
  a %% b	               (a % b + b) % b

multi etends example

 moduleKeywords = ['extended', 'included']
 
 class Trait
 	@mixin: (obj) =>   
 		for key, value of obj when key not in moduleKeywords
 			@::[key] = value		
 
 		obj.with?.apply(@)
 		this
 
 	@with: (objs ...) ->
 		@mixin obj for obj in objs
 
 
 MongoDao =
 	find: () -> console.log("find items in mongo")
 
 	create: () -> console.log("delete item in mongo")
 
 class UserDao extends Trait 
 	@with Daoable, MongoDao

转载于:https://my.oschina.net/u/217548/blog/398992

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值