CoffeeScript เป็นภาษาการเขียนโปรแกรมที่แปลงเป็น JavaScript ซึ่งออกแบบมาเพื่อเพิ่มความอ่านง่ายและความกระชับของโค้ด JavaScript ผ่านไวยากรณ์ที่สะอาดขึ้นและการลดโค้ดที่ซ้ำซ้อน มันส่งเสริมสไตล์การเขียนโปรแกรมที่ซับซ้อนมากขึ้น โดยได้รับแรงบันดาลใจจาก Python และ Ruby โดยมีเป้าหมายเพื่อทำให้กระบวนการพัฒนาง่ายขึ้น โดยเฉพาะสำหรับแอปพลิเคชันเว็บ CoffeeScript ยังถูกออกแบบมาเพื่อช่วยให้นักพัฒนาสามารถเขียนโค้ดได้อย่างรวดเร็วและชัดเจน ในขณะที่ยังคงแปลงเป็น JavaScript มาตรฐาน ซึ่งทำให้สามารถทำงานได้ในเบราว์เซอร์หรือสภาพแวดล้อมใด ๆ ที่รองรับ JavaScript
CoffeeScript ถูกสร้างขึ้นโดย Jeremy Ashkenas และเปิดตัวครั้งแรกในปี 2009 ภาษาเกิดขึ้นจากความต้องการที่จะทำให้ JavaScript ง่ายขึ้น ซึ่งแม้จะมีการใช้งานอย่างแพร่หลายในการพัฒนาเว็บ แต่ก็มีความยุ่งยากและมักจะมีความยาวเนื่องจากข้อกำหนดทางไวยากรณ์ นักพัฒนากำลังมองหาวิธีการเขียนโค้ดที่สะอาดและดูแลรักษาง่ายขึ้น และ Ashkenas ใช้โอกาสนี้ในการนำเสนอไวยากรณ์ใหม่ที่รู้สึกเป็นธรรมชาติมากขึ้นและแสดงออกได้ดีขึ้น
CoffeeScript ได้รับแรงบันดาลใจอย่างมากจาก Python และ Ruby ซึ่งเป็นสองภาษาที่มีชื่อเสียงในด้านไวยากรณ์ที่สวยงามและกระชับ ภาษาได้รับความนิยมอย่างรวดเร็ว โดยเฉพาะเมื่อชุมชนการพัฒนาเว็บเริ่มยอมรับเฟรมเวิร์กเช่น Node.js และ Backbone.js ซึ่งได้รับประโยชน์จากไวยากรณ์ที่เรียบง่ายขึ้น การเพิ่มขึ้นของเฟรมเวิร์กด้านหน้าเช่น AngularJS และ React ยังให้แพลตฟอร์มอีกแห่งสำหรับการใช้ CoffeeScript
ณ ขณะนี้ ความนิยมของ CoffeeScript ลดลงเมื่อเปรียบเทียบกับปีแรก ๆ ของมัน โดยเฉพาะอย่างยิ่งเนื่องจากการมาถึงของ ES6 (ECMAScript 2015) ซึ่งนำเสนอคุณสมบัติมากมายที่ CoffeeScript พยายามให้ เช่น ฟังก์ชันลูกศร คลาส และเทมเพลตลิเทอรัล ชุมชนรอบ ๆ CoffeeScript ยังคงมีความกระตือรือร้น และยังคงถูกใช้งานในบางโปรเจกต์เก่า แต่หลาย ๆ นักพัฒนาตัดสินใจที่จะยึดติดกับ JavaScript สมัยใหม่
หนึ่งในคุณสมบัติที่โดดเด่นที่สุดของ CoffeeScript คือการใช้การจัดระเบียบเพื่อระบุขอบเขต ซึ่งช่วยขจัดความจำเป็นในการใช้ปีกกา
square = (x) ->
x * x
การกำหนดฟังก์ชันใน CoffeeScript มีความกระชับและสามารถประกาศได้โดยใช้ ->
(หรือ =>
สำหรับฟังก์ชันที่ผูก)
add = (a, b) -> a + b
CoffeeScript รองรับการสร้างลิสต์ ซึ่งช่วยให้สามารถสร้างอาร์เรย์ได้อย่างกระชับและแสดงออกได้ดี
squares = (x * x for x in [1..5]) # [1, 4, 9, 16, 25]
การแทรกสตริงทำได้ง่าย ทำให้การสร้างสตริงที่มีตัวแปรทำได้สะดวกขึ้น
name = "World"
greeting = "Hello, #{name}!" # "Hello, World!"
การกำหนดคลาสและการขยายคลาสทำได้อย่างราบรื่นใน CoffeeScript โดยมีไวยากรณ์ที่สะอาดกว่าของ JavaScript
class Animal
constructor: (@name) ->
class Dog extends Animal
bark: -> console.log "#{@name} barks."
CoffeeScript ใช้ตัวดำเนินการ splat (...
) เพื่อส่งอาร์เรย์เป็นอาร์กิวเมนต์แยกต่างหาก
multiply = (args...) ->
result = 1
for arg in args
result *= arg
result
คุณยังสามารถตั้งค่าพารามิเตอร์เริ่มต้นเมื่อกำหนดฟังก์ชัน
greet = (name = "stranger") -> "Hello, #{name}!"
การทำลายช่วยให้การกำหนดค่าจากอาร์เรย์และอ็อบเจ็กต์ทำได้กระชับขึ้น
[a, b] = [1, 2]
{foo, bar} = {foo: "Hello", bar: "World"}
unless
CoffeeScript แนะนำคำสั่ง unless
เป็นทางเลือกที่อ่านง่ายกว่าคำสั่ง if not
unless isRaining
console.log "Let's go outside!"
CoffeeScript มีฟังก์ชัน fat arrow (=>
) ที่รักษาคอนเท็กซ์ของ this
คล้ายกับฟังก์ชันลูกศรของ JavaScript
button.addEventListener 'click', =>
console.log "Button clicked!"
CoffeeScript มีคอมไพเลอร์ที่รับไฟล์ .coffee
เป็นข้อมูลนำเข้าและส่งออกเป็น JavaScript มาตรฐาน คอมไพเลอร์นี้สามารถรันได้โดยตรงในบรรทัดคำสั่งหรือรวมเข้ากับระบบการสร้างเช่น Grunt และ Gulp
IDE และโปรแกรมแก้ไขข้อความที่ได้รับความนิยมส่วนใหญ่ เช่น Visual Studio Code, Atom และ Sublime Text มีปลั๊กอินสำหรับการสนับสนุน CoffeeScript รวมถึงการเน้นไวยากรณ์และการคอมไพล์แบบรวม
ในการคอมไพล์โปรเจกต์ CoffeeScript คุณสามารถใช้คำสั่งง่าย ๆ ดังนี้:
coffee -c project.coffee
คุณยังสามารถติดตามไฟล์เพื่อดูการเปลี่ยนแปลงได้ดังนี้:
coffee -w -c project.coffee
CoffeeScript ถูกใช้เป็นหลักในการพัฒนาเว็บ โดยเฉพาะสำหรับการเขียนสคริปต์ด้านลูกค้าใน SPA (Single Page Applications) เฟรมเวิร์กเช่น Backbone.js และ Rails ได้ใช้ CoffeeScript และแอปพลิเคชันการผลิตจำนวนมากยังคงมีอยู่ที่สร้างขึ้นด้วยภาษา
CoffeeScript ทำหน้าที่เป็นน้ำตาลทางไวยากรณ์บน JavaScript ช่วยให้สามารถเขียนโค้ดได้อย่างกระชับและอ่านง่าย JavaScript ไม่รองรับคุณสมัติเช่นการสร้างลิสต์และตัวดำเนินการ splat โดยตรง ซึ่งทำให้ CoffeeScript น่าสนใจสำหรับการใช้งานบางกรณี
ในขณะที่ CoffeeScript เหมาะสมกับระบบนิเวศของ JavaScript แต่ Python มีไลบรารีและเฟรมเวิร์กที่กว้างขวางมากขึ้นสำหรับการวิเคราะห์ข้อมูล การคำนวณทางวิทยาศาสตร์ และการพัฒนาเว็บ CoffeeScript เหมาะสมกว่าสำหรับการพัฒนาด้านหน้า
CoffeeScript และ Ruby มีการแสดงออกที่เป็นอัตลักษณ์ แต่จุดประสงค์ของ CoffeeScript มุ่งเน้นไปที่การทำงานร่วมกับ JavaScript Ruby เป็นภาษาที่ใช้ทั่วไปมากขึ้นพร้อมกับระบบนิเวศที่หลากหลาย แต่ขาดความสามารถในการคอมไพล์โดยตรงในเว็บเบราว์เซอร์
TypeScript มีการตรวจสอบประเภทแบบสถิติซึ่งสามารถช่วยจับข้อผิดพลาดในระหว่างการคอมไพล์ ในขณะที่ CoffeeScript มุ่งเน้นไปที่การทำให้ไวยากรณ์ของ JavaScript ง่ายขึ้นโดยไม่มีการบังคับประเภท
หนึ่งในเครื่องมือการแปลจากแหล่งที่มาที่มีประโยชน์ที่สุดสำหรับ CoffeeScript คือ CoffeeScript-ES6 ซึ่งสามารถแปลง CoffeeScript เป็น JavaScript ES6 นอกจากนี้ ในเรื่องของเครื่องมือการแปลโค้ด Babel ยังสามารถจัดการการแปลง JavaScript ได้ ทำให้นักพัฒนาสามารถทำงานกับคุณสมบัติของ JavaScript สมัยใหม่ในขณะที่ยังรองรับเวอร์ชันเก่า
เมื่อแปลจาก CoffeeScript สิ่งสำคัญคือต้องพิจารณาวิธีการจัดการการจัดระเบียบอย่างถูกต้อง เนื่องจากมีความสำคัญทางไวยากรณ์ และวิธีการแปลงคุณสมบัติของ CoffeeScript ให้เป็นเทียบเท่ากับภาษาอื่น ๆ อย่างมีประสิทธิภาพ