มีใครใช้ Coffeescript สำหรับแอปพลิเคชันการผลิตหรือไม่? [ปิด]


94

Coffeescriptดูดีทีเดียว มีใครใช้บ้าง ข้อดีและข้อเสียคืออะไร?


ที่เกี่ยวข้อง: stackoverflow.com/questions/6245341/…
Trevor Burnham

คำตอบ:


113

เราได้เริ่มใช้ CoffeeScript ในผลิตภัณฑ์ของเราซึ่งเป็นเว็บไซต์ที่ไม่เปิดเผยต่อสาธารณะซึ่งโดยพื้นฐานแล้วเป็นแอปสำหรับเรียกดูข้อมูลบางประเภท เราใช้ CoffeeScript เป็นคอมไพเลอร์บรรทัดคำสั่ง (ไม่ใช่บนเซิร์ฟเวอร์ซึ่งในที่สุดเราก็อยากทำ)

ข้อเสนอ (สำหรับเรา):

  • มันกำจัดความยุ่งเหยิงที่ไม่จำเป็นจำนวนมากในจาวาสคริปต์ (เช่นวงเล็บปีกกาเซมิโคลอนบางวงเล็บ) ในระดับที่รหัสนั้นสะอาดกว่าและเข้าใจง่ายกว่าจาวาสคริปต์
  • โค้ดน้อยกว่าจาวาสคริปต์ 20-30% (เพื่อทำสิ่งเดียวกันทุกประการ)
  • CoffeeScript ไม่เพียง แต่ขจัดเสียงรบกวนเท่านั้น แต่ยังเพิ่มคำหลักคลาสและคุณสมบัติต่างๆเช่น heredocs เพื่อให้การเข้ารหัสสะอาดขึ้นและสนุกสนาน
  • เมื่อพิจารณาจากคะแนนก่อนหน้านี้การเขียนโค้ดใน CoffeeScript จะเร็วขึ้นอย่างไม่ต้องสงสัยเมื่อคุณเรียนรู้เชือก

ข้อเสีย

  • เมื่อใช้คอมไพลเลอร์บรรทัดคำสั่ง: เพื่อดีบักคุณกำลังดูโค้ดที่แตกต่างกันเมื่อแก้ปัญหา (javascript) เหมือนกับตอนที่เขียนฟิกซ์ (กาแฟ) อย่างไรก็ตาม CoffeeScript ของเรายอดเยี่ยมมากจนเราไม่จำเป็นต้องแก้จุดบกพร่องเลย!

ที่สำคัญเราสามารถย้อนกลับได้ตลอดเวลา คอมไพเลอร์ Coffeescript ของเราเป็นเพียงการผลิตจาวาสคริปต์ที่อ่านได้ดังนั้นหากใครก็ตามเปลี่ยนใจหรือคิดอะไรไม่ออกเราก็สามารถกลับไปใช้จาวาสคริปต์ที่สร้างกาแฟได้และเขียนโค้ดต่อไป


1
PandaWood โจมตีได้ทุกจุด ฉันใช้มันในการผลิตสำหรับลูกค้าของฉันในปีนี้ด้วยความสำเร็จอย่างมาก เรากำลังใช้ Buildr เป็นคอมไพเลอร์เนื่องจากรองรับการรวมไฟล์ Coffeescript และไฟล์จาวาสคริปต์ไว้ในไฟล์เดียว github.com/balupton/buildr.npm
balupton

13
"CoffeeScript ของเรายอดเยี่ยมมากจนเราไม่จำเป็นต้องแก้จุดบกพร่องเลย!" เอ๊ะ ... จริงเหรอ? ข้อมูลของคุณตรงกับความคาดหวังของคุณเสมอ? คุณไม่เคยคาดไม่ถึงthisหรือส่งผิดประเภทไปยังฟังก์ชัน? ฉันไม่คิดว่าคุณได้ทำอะไรที่น่าสนใจถ้าคุณยังไม่ต้อง "แก้ไขข้อบกพร่องอะไรเลย"
Ryan Florence

8
@rpflo หากคุณสังเกตเห็นคำว่า "เราได้เริ่มใช้ Coffeescript ... " และจับคู่กับข้อความที่ไม่เหมาะสมและนำไปใช้ในบริบทที่ไม่เอื้ออำนวย - ฉันคิดว่าใคร ๆ ก็เห็นด้วย นั่นเป็นเรื่องเล็กน้อยสำหรับความกังวล เป็นไปได้อย่างสมบูรณ์จากข้อความที่ฉันให้ไว้ว่าเราเพิ่งแปลงจาวาสคริปต์ที่ใช้งานได้แล้วเป็นกาแฟดังนั้นจึงไม่จำเป็นต้องมีการดีบักอย่างจริงจัง
PandaWood

3
เกี่ยวกับ Con 'ตอนนี้มี Source-Maps ที่ไม่เป็นปัญหาอีกต่อไปเพียงรวบรวม-mและคุณก็ทำได้ดี
omeid

@omeid จุดดี. ผมได้ติดตามและได้ประสบความสำเร็จในแหล่งแผนที่ทำงานใน Chrome ด้วย CoffeeScript
PandaWood

27

เราใช้ CoffeeScript สำหรับทั้งหมดของจาวาสคริปต์ในBusyConf BusyConf ส่วนใหญ่เป็นแอปพลิเคชันฝั่งไคลเอ็นต์ที่ทำงานในเบราว์เซอร์รวมถึงการรองรับโหมดออฟไลน์

รหัสกาแฟทั้งหมดของเราได้รับการทดสอบอย่างสมบูรณ์ การทดสอบเขียนด้วยตัวเองด้วยแผ่นกาแฟและใช้กรอบQunit (ซึ่งเขียนด้วยจาวาสคริปต์) เรายังเขียนส่วนขยายไปยังกรอบ Qunit ที่ทำให้การทดสอบดีขึ้น นามสกุล Qunit ถูกเขียนในCoffeeScript แอปพลิเคชันของเรามีเวอร์ชันสำหรับมือถือซึ่งเขียนด้วย CoffeeScript และใช้เฟรมเวิร์กSencha Touch (ซึ่งเขียนด้วยจาวาสคริปต์)

สิ่งที่ต้องทำคือคุณสามารถแทรกการอ้างอิงจาวาสคริปต์ในแอปพลิเคชันของคุณได้อย่างอิสระ แต่โค้ดทั้งหมดที่คุณเขียน (รหัสแอปพลิเคชันการทดสอบ ฯลฯ ) สามารถ (และควร!) เป็นกาแฟ


24

เกือบหนึ่งปีต่อมาควรโพสต์การอัปเดตบางอย่าง:

  1. Ruby on Rails 3.1 กำลังรวมการสนับสนุน CoffeeScript อย่างเป็นทางการซึ่งหมายความว่าจะเห็นการใช้งานจริงมากขึ้น ฉันได้พูดคุยที่ RailsConf เมื่อเดือนที่แล้วซึ่งผู้เข้าร่วมส่วนใหญ่ไม่เคยได้ยินเกี่ยวกับ CoffeeScript มาก่อนและได้รับการรับรองอย่างแน่นหนาจาก dhh - กระตือรือร้นที่จะเข้าร่วม
  2. มีหนังสือเกี่ยวกับ CoffeeScript ซึ่งปัจจุบันอยู่ใน eBook และเร็ว ๆ นี้จะพิมพ์จาก The Pragmatic Bookshelf เรียกว่าCoffeeScript: Accelerated JavaScript Developmentและเป็นของคุณจริงๆ มันขึ้นอยู่กับ CoffeeScript 1.1.1
  3. ภาษามีการเปลี่ยนแปลงน้อยมากในช่วงหกเดือนระหว่าง 1.0 ถึง 1.1.1 การเปลี่ยนแปลงเกือบทั้งหมดมีคุณสมบัติเป็น "การแก้ไขข้อบกพร่อง" ฉันต้องปรับแต่งโค้ดในหนังสือเพียงเล็กน้อยเพื่อเปลี่ยนจาก 1.0.1 เป็น 1.1.1 อย่างไรก็ตามฉันมั่นใจว่าภาษาจะเห็นการเปลี่ยนแปลงที่สำคัญมากขึ้นในอนาคต

รายชื่อโครงการ CoffeeScript ที่ชัดเจนที่สุดอยู่ในหน้าIn the Wildของวิกิของ CoffeeScript

ฉันจะบอกว่าการใช้งาน CoffeeScript ส่วนใหญ่จนถึงขณะนี้ร่วมกับ Appcelerator เพื่อสร้างแอป iPhone / Android (Wynn Netherland จาก The Changelog ทำให้หนังสือของฉันไม่พอใจโดยอธิบายว่า CoffeeScript เป็น "อาวุธลับของฉันสำหรับการพัฒนาอุปกรณ์เคลื่อนที่ iOS, Android และ WebOS") แต่จะมีการใช้งานมากขึ้นในการผลิตแอป Rails และฉันหวังว่าที่อื่น ๆ - ในอีกไม่กี่เดือนข้างหน้า



10

ฉันรัก Coffeescript ในทุกวันนี้ โดยพื้นฐานแล้วแอปพลิเคชันHotelTonight iPhone ทั้งหมดจะเขียนอยู่ในนั้น (โดยใช้ Appcelerator Titanium ซึ่งให้คุณเขียนแอป "เนทีฟ" ใน JavaScript ไม่ใช่แอปพลิเคชันบนเว็บเช่น Phonegap) ฉันเลือกใช้ Coffeescript ในกรณีนี้เพราะมันทำให้การจัดระเบียบและการดูแลรักษา JS จำนวนมากง่ายขึ้นมาก ฉันยังพบว่าการเขียนโค้ดด้วย Coffeescript (เทียบกับ JavaScript) เป็นเรื่องที่น่าพึงพอใจมากขึ้น นอกจากนี้เรายังใช้ Coffeescript สำหรับ JS ในแอพ Rails ของเรา แต่นี่เป็นโค้ดเล็กน้อย / เล็กน้อยอย่างไม่น่าเชื่อเมื่อเทียบกับแอพโทรศัพท์ทั้งหมด

ข้อดีส่วนใหญ่เกี่ยวข้องกับการเป็นเพียงไวยากรณ์ที่ดีกว่า แต่ยังทำให้กลไก OO เป็นมาตรฐานจากนั้นจึงเพิ่มส่วนเพิ่มเติมที่ดี (ความเข้าใจในรายการขอบเขตบางอย่าง ฯลฯ )

ข้อเสียเกือบเป็นศูนย์สำหรับฉัน อย่างแรกคือมันเป็นเลเยอร์พิเศษในการดีบัก คุณจะต้องดู JS ที่สร้างขึ้น (ซึ่งอ่านได้และดีมาก) จากนั้นแมปกับโค้ด Coffeescript ของคุณ สำหรับเรานี่ไม่ใช่ปัญหาเลย แต่เป็น YMMV

ในท้ายที่สุดสิ่งที่ฉันใช้ก็คือไม่มีความเสี่ยงในแง่ของการใช้งานบนแอปที่ใช้งานจริงดังนั้นอย่าปล่อยให้สิ่งนั้นเป็นตัวบล็อก จากนั้นไปทดลองใช้ เขียนโค้ดเปรียบเทียบกับสิ่งที่คุณเขียนใน JS ดูโค้ดที่สร้างขึ้นเพื่อดูว่าคุณสบายใจที่จะสามารถอ่านสิ่งนั้นเพื่อแก้ไขข้อบกพร่องได้หรือไม่ นอกจากนี้ยังออกไปเที่ยวใน #coffeescript IRC ผู้คนมากมายที่นั่น และสุดท้ายดูว่าแอปจะผสานรวมกับแอปของคุณอย่างไรเช่นกระบวนการ "สร้าง" ของคุณคืออะไร (เช่นสำหรับ Rails ลองใช้ Barista สำหรับบางอย่างแบบสแตนด์อโลนเพียงใช้ "coffee -w" ที่ให้มาเป็นต้น)


3

Coffeescript ทำให้การเขียน JS ง่ายขึ้นจริงๆ คุณจะได้รหัสที่สะอาดและมีประสิทธิภาพมากขึ้น

ดังที่กล่าวมาคุณยังสามารถทำสิ่งที่คุณทำได้ใน vanilla JS เท่านั้น เมื่อคุณใช้ Coffeescript เพียงพอแล้วการเขียน JS (ดี) จะง่ายขึ้นมาก

ดังนั้นหากคุณยังไม่เคยใช้ JS เลยฉันขอแนะนำให้เรียนรู้การเขียนโค้ดแทน คุณจะได้รหัสที่ดีขึ้นสะอาดขึ้นและมีข้อบกพร่องน้อยลง หากคุณใช้ JS ได้คล่องอยู่แล้วอาจไม่ใช่ความคิดที่ดีที่จะเริ่มใช้ Coffeescript ในแอป "ของจริง"

(นอกจากนี้คอฟฟี่สคริปยังทำให้ฉันรำคาญเล็กน้อยที่ดูเหมือนว่าจะส่งเสริมโค้ดที่ค่อนข้าง "ลอยๆ" ฉันไม่รู้ว่ามันเป็นสิ่งที่ดีหรือไม่ดี แต่ดูเหมือนว่า TMTOWTDI จะเป็นกรณีที่รุนแรง)


25
ฉันไม่เห็นด้วยกับคำแนะนำให้เรียนรู้กาแฟแทนจาวาสคริปต์และยังมีความคิดที่ว่าเมื่อเรียนจาวาสคริปต์ได้คล่องแล้ว / ใช้กาแฟก็ไม่มีประโยชน์ การทำความเข้าใจจาวาสคริปต์เป็นพื้นฐานสำหรับนักพัฒนาเว็บ การทำความเข้าใจจาวาสคริปต์ที่รหัสกาแฟของคุณจะสร้างเป็นสิ่งที่จำเป็น สำหรับผู้ที่เป็นผู้เชี่ยวชาญด้านจาวาสคริปต์อยู่แล้ว Coffeescript จะเป็นอุปกรณ์ที่มีมนต์ขลังและปฏิวัติวงการเครื่องมือ er
Jim Garvin

3
@ จิมการ์วินเห็นด้วย เป็นสิ่งสำคัญที่ผู้คนจะเรียนรู้จาวาสคริปต์ของพวกเขาฉันก็บอกว่ามันอาจเป็นไปไม่ได้ที่จะเรียนรู้กาแฟก่อนจาวาสคริปต์อยู่ดีเนื่องจากแหล่งข้อมูลทั้งหมดสำหรับผู้เริ่มต้นจะเขียนด้วย js แบบเก่าที่ดี (เว้นแต่ Rick Olsen จะตัดสินใจเริ่มโพสต์ เริ่มบทเรียน JS ในบล็อกของเขา)
Daniel Mendel

2
คุณต้องเข้าใจ Javascript เพื่อเขียน Coffeescript เพื่อให้คุณสามารถดีบักโค้ดของคุณเมื่อเกิดข้อผิดพลาด
Blaise

อัปเดต: ขณะนี้ CoffeeScript มีเอกสารที่ดีเพียงพอและซอร์สแมปทำให้การดีบักโค้ด JS ไม่จำเป็น JavaScript เป็นเพียงเป้าหมายในปัจจุบัน การเรียนรู้ JS ยังคงมีประโยชน์มาก แต่ผู้เริ่มต้นสามารถเรียนรู้ CoffeeScript ได้เพียงพอโดยไม่ต้องรู้ JavaScript ใด ๆ เพื่อเริ่มต้นการเขียนโค้ด
Carl Smith

3

โปรดทราบว่าแม้ว่าจะมีคอมไพเลอร์ แต่คุณจะไม่ได้รับการตรวจสอบแบบคงที่เนื่องจากลักษณะไดนามิกของ JavaScript ตามที่เขียนไว้ในคำถามที่พบบ่อย:

การวิเคราะห์แบบคงที่

CoffeeScript ใช้คอมไพเลอร์ต้นทางไปยังแหล่งที่มาโดยตรง ไม่มีการตรวจสอบประเภทและเราไม่สามารถสรุปได้ว่ามีตัวแปรอยู่หรือไม่ ซึ่งหมายความว่าเราไม่สามารถใช้คุณลักษณะที่ภาษาอื่นสร้างได้โดยไม่ต้องตรวจสอบรันไทม์ที่มีราคาแพง ด้วยเหตุนี้คุณลักษณะใด ๆ ที่อาศัยการวิเคราะห์ประเภทนี้จะไม่ได้รับการพิจารณา

การสนับสนุน IDE นั้นเป็นผู้ใหญ่น้อยกว่า JavaScript (Cloud9 มีการสนับสนุนการเน้นไวยากรณ์ แต่ Eclipse JSDT มีการปรับโครงสร้างและอื่น ๆ ): /programming/4084167/ide-or-its-add-in-for-coffescript - การเขียนโปรแกรม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.