ยินดีต้อนรับสู่การเดินทาง
การเดินทางครั้งนี้ประกอบด้วยการแนะนำแบบสั้นๆ สำหรับแต่ล่ะคุณสมบัติของ Scala ที่ใช้บ่อยที่สุด และมีมีความตั้งใจเพื่อสำหรับผู้ที่เรียนรู้ภาษา Scala ใหม่
และนี่ก็เป็นเพียงบทความสั้นๆ ที่ไม่ใช้การสอนเต็มรูปแบบของภาษา Scala หากต้องการเรียนรู้มากขึ้นให้พิจารณาหนังสือ หรือขอคำปรึกษาจากแหล่งอื่นๆ
อะไรคือ Scala?
Scala เป็นภาษาเขียนโปรแกรมแบบหลากหลายกระบวนทัศน์ที่ทันสมัย ที่ออกแบบมาเพื่อแสดงรูปแบบการเขียนโปรแกรมโดยทั่วไปที่กระชับ สง่างาม และมีชนิดข้อมูลที่ปลอดภัย (type-safe) ซึ่งผสานคุณสมบัติของภาษาเชิงวัตถุและภาษาเชิงฟังก์ชัน
Scala เป็นภาษาเชิงวัตถุ
Scala เป็นภาษาการเขียนโปรแกรมเชิงวัตถุที่แท้จริง ในแง่ที ่ทุกค่าเป็นวัตถุ ชนิดข้อมูลและพฤติกรรมของวัตถุอธิบายโดยคลาส (classes) และ ลักษณะ (traits) คลาสจะถูกขนายโดยการจัดชั้นย่อย (subclassing) และกลไลองค์ประกอบแบบผสมผสาน (mixin-based composition) ที่มีความยืดหยุ่นเพื่อทดแทนสำหรับการสืบทอดหลายแบบ
Scala เป็นภาษาเชิงฟังก์ชัน
Scala ยังเป็นภาษาเชิงฟังก์ชันในแง่ที่ ทุกฟังก์ชันเป็นค่า Scala มีไวยกรณ์แบบง่ายสำหรับกำหนดฟังก์ชันที่ไม่ระบุตัวตน รองรับ ฟังก์ชันที่มีลำดับสูงขึ้น (higher-order functions) ทำให้ฟังก์ชันสามารถ ซ้อนกันได้ (nested) และรองรับ currying, เคสคลาส (case class) ของ Scala สนับสนุน รูปแบบการจับคู่ (pattern-matching) เป็นการจำลองชนิดข้อมูลแบบพีชคณิตที่ใช้ในภาษาเชิงฟังก์ชันหลายภาษา, วัตถุ Singleton ทำให้มีวิธีที่สะดวกในการจัดกลุ่มฟังก์ชันที่ไม่ใช้สมาชิกของคลาส
นอกจากนี้ Scala มีแนวคิดของรูปแบบการจับคู่โดยธรรมชาติซึ่งสามารถขยายเป็น การประมวลผลข้อมูลด้วย XML ด้วยความช่วยเหลือของ รูปแบบลำดับที่ถูกละเลย (right-ignoring sequence patterns), โดยวิธีของการขยายทั่วไปผ่านทาง วัตถุตัวดึงข้อมูล (extractor object) ในบริบทนี้ การทำความเข้าใจ for มีประโยชน์สำหรับการคิดสูตรคิวรี่ข้อมูล คุณลักษณะเหล่านี้ทำให้ Scala เหมาะสำหรับการพัฒนาแอพพลิเคชันแบบเช่นเว็บเซอร์วิส
Scala มีชนิดข้อมูลแบบคงที่
Scala เป็นระบบที่มีลักษณะของชนิดข้อมูลบังคับให้เป็นแบบคงที่ (statically) ว่าสิ่งที่เป็นนามธรรม (abstraction) ถูกใช้อย่างปลอดภัยและสอดคล้องกัน โดยเฉพาะอย่างยิ่ง ระบบชนิดข้อมูลสนับสนุนข้อมูลหลายประเภท ดังนี้:
- คลาสทั่วไป
- คำอธิบายประกอบผันแปร
- ขอบเขตชนิดข้อมูล ข้างบน และ ข้างล่าง
- คลาสภายใน และ ชนิดข้อมูลนามธรรม เป็นสมาชิกของวัตถุ
- ชนิดข้อมูลผสม
- อ้างอิงตัวเองของชนิดข้อมูลอย่างชัดเจน
- พารามิเตอร์ปริยาย และ การเปลี่ยนปริยาย
- เมธอดหลายรูปแบบ)
ชนิดข้อมูลอนุมาน (Type inferrence) หมายถึงผู้ใช้ไม่จำเป็นต้องใส่โค้ดคำอธิบายประกอบที่มีข้อมูลซ้ำซ้อน ในการรวม คุณสมบัติเหล่านี้จะเป็นคุณสมบัติพื้นฐานที่มีประสิทธิภาพสำหรับการนำส่วนของโปรแกรมที่เป็นนามธรรม มาใช้ใหม่ได้อย่างปลอดภัยและเพื่อให้สามารถขยาย ชนิดข้อมูลที่ปลอดภัยของซอฟต์แวร์
Scala สามารถขยายออกได้
ในทางปฏิบัต การพัฒนาแอพพลิเคชันเฉพาะโดเมนมักต้องใช้ส่วนขยายของภาษาเฉพาะโดเมน ซึ่ง Scala มีการรวบรวมกลไกเฉพาะที่ทำให้ง่ายต่อการเพิ่มโครงสร้างภาษาใหม่ ในรูปแบบห้องสมุด
ในหลายกรณีสามารถทำได้โดยไม่ปราศจากสิ่งอำนวยความสะดวกเมตาดาต้าโปรแกรม อย่างเช่น มาโคร, ตัวอย่างเช่น
- คลาสโดยปริยาย อนุญาติให้เพิ่มขยายเมธอดกับชนิดข้อมูลที่มีอยู่
- สอดแทรกสตริงตัวอักษร คือการขยายโดยผู้ใช้ด้วยตัวสอดแทรกที่กำหนดเอง.
Scala ทำงานร่วมกันได้
Scala ออกแบบมาเพื่อให้ทำงานร่วมกันกับ Java Runtime Environment (JRE) โดยเฉพาะอย่างยิ่งปฏิสัมพันธ์กับหลักภาษาโปรแกรมเชิงวัตถุ Java อย่างราบรื่นไร้รอยต่อ คุณสมบัติใหม่ของภาษา Java อย่างเช่น SAMs, Lambdas, annotations และ generics มีความคล้ายคลึงกับ Scala
คุณสมบัติเหล่านี้ของ Scala ที่ไม่คล้ายคลึงกับ Java อย่างเช่น default และ ชื่อพารามิเตอร์ จะถูกคอมไพล์ให้ใกล้เคียงกับ Java ตามที่สมควร ซึ่ง Scala มีการคอมไพล์แบบเดียวกันกับ Java (แยกการคอมไพล์, การโหลดคลาสแบบไดนามิก) ทำให้สามารถเข้าถึงไลบรารี่ที่มีคุณภาพสูงของ Java จำนวนมากได้
ขอให้สนุกกับการเดินทาง!
ไปต่อได้ที่ หน้าถัดไป ในเมนูของเนื้อหาเพื่ออ่านเพิ่มเติม
Contributors to this page:
Contents
- บทนำ
- พื้นฐาน
- ชนิดข้อมูล
- คลาส
- Default Parameter Values
- Named Arguments
- Traits
- Tuples
- Class Composition with Mixins
- Higher-order Functions
- Nested Methods
- Multiple Parameter Lists (Currying)
- Case Classes
- Pattern Matching
- Singleton Objects
- Regular Expression Patterns
- Extractor Objects
- For Comprehensions
- Generic Classes
- Variance
- Upper Type Bounds
- Lower Type Bounds
- Inner Classes
- Abstract Type Members
- Compound Types
- Self-types
- Implicit Parameters
- Implicit Conversions
- Polymorphic Methods
- Type Inference
- Operators
- By-name Parameters
- Annotations
- Packages and Imports
- Package Objects