This post is part of a series called Swift From Scratch.
Thai (ภาษาไทย) translation by Anak Mirasing (you can also view the original English article)
ถ้าคุณกำลังอ่านบทความนี้อยู่, คุณอาจมีโอกาสที่จะได้รู้จักภาษาใหม่ที่ชื่อว่า Swift. Apple นั้นได้ทำการปล่อย Swift ในช่วงของงาน WWDC สำหรับนักพัฒนาและทุกคนก็ได้ตื่นเต้นกับมัน. สิ่งที่นักพัฒนาส่วนใหญ่นั้นคาดหวังสำหรับภาษาในการเขียนโปรแกรมใหม่ๆ นั้นคือพลังสำหรับการพัฒนาแอพพลิเคชั่นสำหรับแพลตฟอร์ม iOS และ OSX.
คุณอาจจะคุ้นเคยกับ Swift ถ้าคุณเคยพัฒนาแอพพลิเคชั่นบน iOS หรือ OSX ด้วยภาษา Objective-C,
แต่ถึงแม้กระนั้นก็ยังมีบางส่วนสำคัญที่มีความแตกต่าง. นอกจากนี้คุณยังอาจจะคุ้นเคยกับ Swift ที่มีไวยกรณ์ที่ดีและทันสมัย. เราทำบทความนี้ขึ้นมาเพื่อที่จะแสดงให้เห็นถึงความแตกต่างระหว่าง Swift และ Objective-C โดยความแตกต่างเหล่านี้เป็นสิ่งที่ดี. เรามาเริ่มกันเลย.
1. ข้อกำหนดเบื้องต้น
การเขียนโปรแกรม
ในบทความทั้งหมดนี้, เราจะมีการอ้างถึงภาษา Objective-C และเปรียบเทียบกันระหว่าง Objective-C กับ Swift. อย่างไรก็ตาม, ก็ไม่ได้จำเป็นที่เราจะต้องคุ้นเคยกับภาษา Objectvice-C.
อย่างที่ได้บอกไป, คือมันเป็นสิ่งสำคัญเมื่อคุณมีประสบการณ์เกี่ยวกับภาษาที่ใช้ในการเขียนโปรแกรม. ในบทความนี้นั้นจะเน้นไปที่ภาษา Swift เป็นหลัก, โดยที่ไม่ได้เน้นไปที่พื้นฐานของการเขียนโปรแกรมสักเท่าไร. เราหวังว่าคุณอาจจะคุ้นเคยกับการใช้งาน ตัวแปร, ตัวแปรค่าคงที่, โฟลว์การทำงานและการเขียนโปรแกรมแบบ object-oriented programming มา.
ยิ่งถ้าคุณคุ้นเคยกับพวกภาษาเช่น Objective-C, Java, Ruby, PHP หรือ JavaScript แล้วนั้น คุณจะไม่มีปัญหาสำหรับการทำความเข้าใจแนวคิดที่จะอธิบายในบทความนี้เลย. ในความเป็นจริงแล้ว, เราสามารถเรียนรู้ Swift ได้อย่างรวดเร็ว เพราะมีความคล้ายคลึงกับภาษาโปรแกรมมิ่งที่ดังๆอีกหลายภาษา รวมทั้งภาษา Objective-C ด้วย.
Xcode
เราจะสามารถใช้งาน Swift ได้ตั้งแต่ Xcode เวอร์ชั่น 6 ขึ้นไปและตัว Apple's IDE(Integrated Development Environment) เวอร์ชั่นล่าสุด. เราสามารถดาวน์โหลดได้ที่ App Store หรือ Apple's Developer Center.
2. Swift
จากการเปรียบเทียบกับภาษา Objective-C หรือ Java นั้น, Swift นั้นมีความกระชับคล้ายๆกับ Ruby และ JavaScript. ถึงแม้ว่า Chris Lattner คนที่สร้างภาษา Swift นั้น, จะได้แรงบันดาลใจมากจากภาษาอื่นหลายๆภาษา, แต่ Swift เองก็มีความเป็นตัวของตัวเองที่สูงมากเช่นกัน.
อย่างที่เราอาจจะรู้ว่า, Objective-C นั้นเป็นซุปเปอร์เซ็ตของภาษา C. แต่ Swift นั้นไม่ได้เป็น. ถึงแม้ว่า Swift นั้นจะมีการใช้วงเล็บปีกกาและมีจำนวนของคีย์เวิร์ดเหมือนกับภาษา C, แต่ Swift ก็ไม่สามารถใช้งานให้เข้ากันได้กับภาษา C.
Swift นั้นเป็นภาษาในการเขียนโปรแกรมสมัยใหม่ ที่ให้ความรู้สึกใช้งานง่าย ยิ่งถ้าเราเคยใช้ภาษาอย่างเช่น Java หรือภาษาที่มีพื้นฐานมาจากภาษา C แบบ Objective-C. ในช่วงที่กำลังพัฒนาและออกแบบภาษา Swift นั้น, Chris Latter ได้เจาะจงไปที่ลักษณะสำคัญที่ใช้ในการออกแบบนิยามของภาษา.
Safety (ปลอดภัย)
ความปลอดภัยนั้นคือพื้นฐานอย่างหนึ่งของ Swift. เราจะสามารถเรียนรู้ได้อย่างรวดเร็วว่า Swift นั้นแตกต่างเป็นอย่างมากจาก Objective-C ในเรื่องของความปลอดภัยและส่งผลกระทบโดยตรงกับโค้ดของเรา. ถ้าเราเคยใช้งานภาษา Objective-C มาก่อน, ในส่วนนี้เราก็จะได้ใช้งานเช่นกัน.
LLVM
Chris Lattner ยังได้ออกแบบ LLVM (Low Level Virtual Machine) compiler และไม่น่าแปลกใจเลยที่ Swift ได้ถูกสร้างขึ้นด้วย LLVM compiler. ผลลัพธ์ของความเร็ว, พลังและความเชื่อถือได้. Swift นั้นมีความเร็วมากกว่า Objective-C ในหลายๆ สถานการณ์. ถ้าคุณสนใจรายละเอียดเพิ่มเติม สามารถอ่านต่อได้ที่บทความของ Jesse Squires.
Type Inference
Swift นั้นมีฟีเจอร์ที่สำคัญมากอย่างนึงคือ Type safety. Swift นั้นจะตรวจสอบโค้ดของเราในช่วงของการประมวณผล(Complie time) และเตือนเราในกรณีที่มีชนิดของตัวแปลที่ไม่ตรงกัน. นั่นหมายความว่า เราจะตรวจจับข้อผิดพลาดได้ก่อน เพื่อช่วยให้เราหลีกเลี่ยงข้อบกพร่องได้ง่ายขึ้น.
โชคดีมาก, ที่ Swift นั้นจะช่วยเราในการจัดการในส่วนนี้. Swift นั้นฉลาดพอที่จะรู้จักชนิดของตัวแปลทั้งตัวแปลธรรมดาหรือค่าคงที่, นั่นหมายความว่าเราไม่จำเป็นต้องระบุชนิดตัวแปลเลยก็ได้. ตามที่เห็นในโค้ดตัวอย่างนั้น, เราได้สร้างตัวแปล a ขึ้นมาและได้ใส่ค่า "this is a string" เข้าไป. ด้วยความฉลาดของ Swift นั้นก็จะจัดการให้ชนิดของตัวแปล a นั้นเป็น String.
var a = "this is a string"นี่เป็นตัวอย่างเพียงเล็กน้อย, ซึ่งคุณจะได้เรียนรู้การใช้งาน Swift ในการควบคุมคำสั่งที่ซับซ้อนมากขึ้น.
ตัวแปลและตัวแปลที่มีค่าคงที่ (Variables และ Constants)
ตัวแปลที่เป็นค่าคงที่นั้นมีประโยชน์มากในภาษา C และ Objective-C, แต่นักพัฒนาส่วนใหญ่ก็ยังใช้มันเท่าที่จำเป็น. ใน Swift นั้นตัวแปรที่เป็นค่าคงที่อาจจะเป็นตัวแปลที่สำคัญหรือแค่ตัวแปลทั้วไปก็ได้. ถ้าค่าในตัวแปลนั้นไม่สามารถเปลี่ยนแปลงได้, นั่นแสดงว่าตัวแปลนั้นก็ควรจะเป็น constant(ตัวแปลที่มีค่าคงที่เปลี่ยนแปลงไม่ได้). เราจะสร้างตัวแปล(Variables) ได้โดยใช้ var และสร้าง Constants ด้วย let .
var a = 1 // variable let b = 1 // constantไม่ใช่เพียงแค่เพื่อแสดงเจตนาในตอนที่เราสร้าง, แต่ยังช่วยเราป้องกันการเปลี่ยนค่าของตัวแปรที่อาจเกิดขึ้นได้โดยไม่ตั้งใจอีกด้วย. ไว้เราจะมาดูตัวแปรและค่าคงที่กันต่ออีกเล็กน้อยในบทความนี้.
Semicolons (;)
ใน Swift นั้น ไม่จำเป็นต้องใช้ semicolons(;). แต่เราก็สามารถใช้ semicolons เมื่อเราต้องการที่จะสร้างหลายสเตจเม้นในบรรทัดเดียวกัน ซึ่งจริงๆก็ไม่ได้จำเป็นอะไร. เรามาลองดูที่ตัวอย่างกัน เพื่อจะได้เข้าใจในแนวคิดมากขึ้น.
var a = 1 var b = 2 var c = 1; var d = 2;เราพึ่งจะรู้เพียงแค่ผิวเผิน. โดยที่เราจะได้เรียนรู้เพิ่มเติมในคุณสมบัติและแนวคิดในบทเรียนนี้. แทนที่เราจะให้คุณเรียนรู้ในทฤษฎีมากเกินไป, เรามาลองเริ่มเขียนโค้ดกันสักเล็กน้อยเลยดีกว่า. โดยที่ Playgrounds จะพาเราเข้าไปทดลองความสามารถของ Swift และ Xcode 6.
3. Playgrounds
Apple ได้เปิดตัว Playgrounds ใน Xcode เวอร์ชั่น 6. ซึ่ง Playground นั้นเป็นเครื่องมือที่ดีมากๆ ที่จะใช้ในการเรียนรู้ภาษา Swift. Playground นั้นจะมีระบบโต้ตอบอัตโนมัติที่จะทำให้เวลาที่เราเขียนภาษา Swift ลงไปแล้วจะสามารถแสดงผลลัพธ์ให้เราเห็นได้ทันที. ไม่ใช่แค่จะทำให้การเรียน Swift ของเรานั้นสนุกมากขึ้น, แต่ยังใช้งานง่ายกว่าที่เราจะไปทำการเริ่มต้นเป็นโปรเจคใน Xcode.
ที่จริงแล้วนั้น, มันง่ายมากที่เราจะมาเริ่มสร้าง playground แรกของพวกเราขึ้นมา. เปิด Xcode 6 และเลือกไปที่ New > Playground... จากเมนู File . ตัวชื่อ playground ของเราและเลือก Platform เป็น iOS.
เลือกที่ที่เราต้องการที่จะเซฟ Playground ไว้แล้วคลิ๊ก Create. จากที่จะมีหลายๆโฟล์เดอร์หลายๆไฟล์ เมื่อเราสร้าง playground นั้น เราจะมีเพียงแค่ไฟล์ .playground ไว้ใช้งานเท่านั้น.
ในส่วนของยูเซอร์อินเตอร์เฟสที่เราเห็นนั้นแม้อาจจะดูไม่ง่าย. ที่เราเห็นในส่วนของด้านซ้ายจะมีคอมเม้นด้านบนในโค้ดนั้น เป็นการอิมพอร์ตตัว UIKit เฟรมเวิร์คเข้ามา ซึ่งเราดูแล้วก็ไม่ยากเกินทำความเข้าใจ. และที่เราเห็นในด้านขวา นั้นจะเป็นผลลัพท์ที่ได้จากโค้ดในทางฝั่งซ้ายนั้นเอง.
เราจะใช้เวลาสักพักในการทำความเข้าใจในโค้ดที่อยู่ใน playground ของเรา. โค้ดบรรทัดแรกนั้น ดูคล้ายๆกับที่เราเคยใช้งานในภาษา Objective-C, PHP หรือ JavaScript. และคอมเม้นในภาษา Swift นั้น จะเริ่มด้วยสองสแลช // หรือถ้าในกรณีที่ต้องการคอมเม้นทีละหลายบรรทัด เราจะใช้ /* และปิดด้วย */ แทน.
เพราะเราได้เลือกแพลตฟอร์มในตอนสร้าง playground เป็น iOS, Xcode จึงได้อิมพอร์ม UIKit เฟรมเวิร์คเข้ามาให้ด้วย ซึ่งจะทำให้เราสามารถเรียกใช้งาน class และ constant ที่มีในเฟรมเวิร์คนี้ได้.
ในบรรทัดสุดท้ายนั้น เราอาจจะรู้สึกคุ้นเคยกับมัน แต่มันยังมีบางสิ่งที่ต้องการความชัดเจนมากขึ้น. เราสร้างตัวแปรขึ้นมามีชื่อว่า str และใส่ค่าสตริงเข้าไปให้กับมัน ซึ่งทำให้โค้ดในบรรทัดนี้เข้าใจได้ง่ายมาก, แต่ให้เราจำไว้ว่า เราได้ประกาศตัวแปรโดยใช้ var นำหน้าชื่อตัวแปร แทนที่จะใช้ชนิดของตัวแปรอย่างที่เราเคยใช้ใน Objective-C. ถ้าในรูปแบบของ Objective-C ก็คงจะเป็นตามตัวอย่างด้านล่างนี้:
NSString *str = @"Hello, playground";ในภาษา Objective-C นั้น, พวกเราจะใช้ชื่อชนิดของตัวแปรแทนการใช้ var และใช้ @ นำหน้าสตริง และจบสเตจเม้นด้วย ;(semicolon). มันสำคัญมากๆที่เราต้องเข้าใจว่าคีย์เวิร์ด var นั้น ไม่ได้ไปถูกใช้แทนชนิดของตัวแปรอย่างในภาษา Objective-C ไม่มีอะไรสำคัญไปคีย์เวิร์ดที่แสดงให้เห็นว่า str นั้นเป็นตัวแปรธรรมดา(variable) แทนที่จะเป็นตัวแปรค่าคงที่(constant). เราจะมาอธิบายกันเพิ่มเติมในเรื่องของรายละเอียด. โดยการลองเพิ่มโค้ดตามตัวอย่างด้านล่างเข้าไปใน playground.
คีย์เวิร์ด let นั้น จะบอกคอมไพล์เลอร์ว่า hello นั้นคือ ตัวแปรค่าคงที่(constant) ไม่ใช่ตัวแปรธรรมดา =(variable) ทั้งตัวแปร str และ hello นั้น มีชนิดเป็น String ทั้งคู่ แต่ str นั้นเป็นตัวแปรธรรมดา(variable) ส่วน hello นั้นเป็นตัวแปรค่าคงที่(constant). ซึ่งเราจะเข้าใจถึงความแตกต่างได้มากขึ้นหลังจากที่เราได้เพิ่มโค้ดสองบรรทัดนั้นเข้าไป.
str = "This is a variable." hello = "This is a constant."เมื่อเราลองใส่ค่าให้กับตัวแปรชื่อ str เราจะพบว่าไม่มีปัญหาอะไรเกิดขึ้น. แต่เมื่อเรานั้นได้ใส่ค่าให้กับตัวแปรชื่อ hello เราจะพบกับ error. ซึ่งเป็น error ที่ Xcode ได้บอกเราว่า เราไม่สามารถที่จะใส่ค่าใหม่ให้กับตัวแปร hello ได้ เพราะตัวแปร hello นั้นเป็นตัวแปรชนิดค่าคงที่ ไม่ใช่ตัวแปรธรรมดา. ซึ่งนี่ก็คือฟีเจอร์ที่สำคัญของ Swift ที่เราจะได้ใช้มัน.
อันนี้เป็นแนวคิดที่ง่ายๆ. คือถ้าค่าของตัวแปรของเราไม่สามารถเปลี่ยนแปลงได้ นั่นหมายความว่ามันควรจะเป็นตัวแปรที่มีค่าคงที่(constant) แทนที่จะเป็นตัวแปรธรรมดา(variable). ในขณะที่มันอาจจะเป็นรายละเอียดปลีกย่อยไปสักหน่อย แต่เราการันตีเลยว่า มันจะทำให้โค้ดของคุณปลอดภัยขึ้นและมีแนวโน้มน้อยมากที่จะเกิดข้อผิดพลาด. เตรียมตัวให้พร้อมเข้าไว้ เพราะเราจะได้เห็น let อีกหลายๆที่ในบทความนี้.
ในบทความนี้เราจะใช้ playground ในการเรียนรู้ในตัวของภาษา Swift เพราะมันเป็นตัวเลือกที่ดีมากๆ. ยังมีอีกหลายฟีเจอร์ที่ทรงพลังของ Playground ที่เรายังไม่ได้เรียนรู้ แต่นี่ก็เพียงพอที่ทำให้เราได้เรียนรู้พื้นฐานของภาษา Swift ได้ ก่อนที่เราจะได้ไปเรียนรู้ในส่วนอื่นๆ.
เรียนรู้เพิ่มเติมจาก Swift Programming Course ของพวกเรา
ถ้าคุณสนใจที่จะศึกษาเพิ่มเติมเกี่ยวกับ Swift, คุณสามารถเรียนรู้เพิ่มเติมได้ที่ full course on Swift development.
อันนี้เป็นตัวอย่างง่ายๆ ตัวอย่างแรก ที่จะให้เรารู้ถึงรายละเอียดของ Playgrounds ว่ามันคืออะไร พร้อมทั้งความสามารถที่เป็นประโยชน์ของมัน.
สรุป
เราอาจจะยังต้องเจอกับบางคำพูดของนักพัฒนาที่ไม่ได้ชื่นชอบภาษา Swift. Swift นั้นมีแนวคิดหลายๆอันที่น่าใช้งาน, เราหวังว่าคุณจะสนุกไปกับความสามารถ, ความงดงามและรัดกุมของมัน. ในบทความต่อไป, เราจะมาทำความรู้จักกับพื้นฐานของภาษา Swift เพิ่มมากขึ้น.