Swift เทียบกับ Objective-C: 10 เหตุผลที่อนาคตชอบ Swift

ภาษาการเขียนโปรแกรมไม่ได้ตายไปง่ายๆ แต่การพัฒนาร้านค้าที่ยึดติดกับกระบวนทัศน์ที่ซีดจางทำ หากคุณกำลังพัฒนาแอพสำหรับอุปกรณ์พกพาและคุณยังไม่ได้ตรวจสอบ Swift โปรดทราบ: Swift ไม่เพียง แต่จะเข้ามาแทนที่ Objective-C ในการพัฒนาแอพสำหรับ Mac, iPhone, iPad, Apple Watch และอุปกรณ์ที่จะมา แต่จะแทนที่ C สำหรับโปรแกรมฝังตัวบนแพลตฟอร์ม Apple ด้วย

ด้วยคุณสมบัติที่สำคัญหลายประการทำให้ Swift มีศักยภาพที่จะกลายเป็นภาษาการเขียนโปรแกรมเชิงพฤตินัยสำหรับการสร้างแอปพลิเคชันที่ตอบสนองและตอบสนองต่อผู้บริโภคได้อย่างสมจริงในอีกหลายปีข้างหน้า

ดูเหมือนว่า Apple จะมีเป้าหมายใหญ่สำหรับ Swift ได้ปรับแต่งคอมไพเลอร์เพื่อประสิทธิภาพและภาษาสำหรับการพัฒนาและกล่าวถึง Swift ว่า "ออกแบบมาเพื่อปรับขนาดจาก" สวัสดีชาวโลก "ไปจนถึงระบบปฏิบัติการทั้งหมด" ในเอกสารของ Swift ในขณะที่ Apple ยังไม่ได้ระบุเป้าหมายทั้งหมดสำหรับภาษา แต่การเปิดตัว Xcode 6, Playgrounds และ Swift ร่วมกันแสดงให้เห็นถึงความตั้งใจของ Apple ที่จะทำให้การพัฒนาแอปง่ายขึ้นและเข้าถึงได้ง่ายกว่าการใช้เครื่องมือการพัฒนาอื่น ๆ

นี่คือเหตุผล 10 ประการที่จะนำหน้าเกมด้วยการเริ่มทำงานกับ Swift ตอนนี้

1. Swift อ่านง่ายกว่า

Objective-C ทนทุกข์ทรมานกับหูดทั้งหมดที่คุณคาดหวังจากภาษาที่สร้างขึ้นบน C เพื่อแยกความแตกต่างของคำหลักและประเภทจากประเภท C Objective-C ได้แนะนำคำหลักใหม่โดยใช้สัญลักษณ์ @ เนื่องจาก Swift ไม่ได้สร้างบน C จึงสามารถรวมคีย์เวิร์ดทั้งหมดและลบสัญลักษณ์ @ จำนวนมากด้านหน้า Objective-C ทุกประเภทหรือคีย์เวิร์ดที่เกี่ยวข้องกับอ็อบเจ็กต์

Swift ลดลงตามอนุสัญญาดั้งเดิม ดังนั้นคุณไม่จำเป็นต้องใช้อัฒภาคในการสิ้นสุดบรรทัดหรือวงเล็บเพื่อล้อมรอบนิพจน์เงื่อนไขภายในคำสั่ง if / else อีกต่อไป ควบคุมการเปลี่ยนแปลงที่มีขนาดใหญ่เป็นว่าวิธีการโทรไม่รังในแต่ละอื่น ๆ [[[ ]]]ที่เกิดในวงเล็บนรกลาก่อน, การเรียกวิธีและฟังก์ชันใน Swift ใช้รายการพารามิเตอร์ที่คั่นด้วยจุลภาคมาตรฐานอุตสาหกรรมภายในวงเล็บ ผลลัพธ์ที่ได้คือภาษาที่ชัดเจนและแสดงออกมากขึ้นด้วยรูปแบบและไวยากรณ์ที่เรียบง่าย

รหัส Swift มีลักษณะใกล้เคียงกับภาษาอังกฤษตามธรรมชาติมากขึ้นนอกเหนือจากภาษาโปรแกรมยอดนิยมอื่น ๆ ความสามารถในการอ่านข้อมูลนี้ทำให้โปรแกรมเมอร์ที่มีอยู่แล้วจาก JavaScript, Java, Python, C # และ C ++ สามารถนำ Swift มาใช้ในห่วงโซ่เครื่องมือได้ง่ายขึ้นซึ่งแตกต่างจากลูกเป็ดขี้เหร่ที่เป็น Objective-C

2. Swift ดูแลรักษาง่ายกว่า

Legacy คือสิ่งที่ยึด Objective-C ไว้ - ภาษาไม่สามารถพัฒนาได้หากไม่มีการพัฒนา C C ต้องการให้โปรแกรมเมอร์ดูแลไฟล์โค้ดสองไฟล์เพื่อปรับปรุงเวลาในการสร้างและประสิทธิภาพของการสร้างแอปที่เรียกใช้งานได้ซึ่งเป็นข้อกำหนดที่นำไปใช้กับ Objective-C

Swift ลดความต้องการสองไฟล์ Xcode และคอมไพเลอร์ LLVM สามารถค้นหาการอ้างอิงและดำเนินการสร้างส่วนเพิ่มโดยอัตโนมัติใน Swift 1.2 ด้วยเหตุนี้งานซ้ำ ๆ ในการแยกสารบัญ (ไฟล์ส่วนหัว) ออกจากเนื้อหา (ไฟล์การนำไปใช้งาน) จึงเป็นอดีตไปแล้ว Swift รวมส่วนหัว Objective-C (.h) และไฟล์การนำไปใช้งาน (.m) ไว้ในไฟล์โค้ดเดียว (.swift)

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

Xcode และคอมไพเลอร์ LLVM สามารถทำงานเบื้องหลังเพื่อลดภาระงานของโปรแกรมเมอร์ ด้วย Swift โปรแกรมเมอร์จะทำบัญชีน้อยลงและใช้เวลาในการสร้างตรรกะของแอปได้มากขึ้น Swift ตัดงานสำเร็จรูปและปรับปรุงคุณภาพของโค้ดความคิดเห็นและคุณสมบัติที่รองรับ

3. Swift ปลอดภัยกว่า

แง่มุมที่น่าสนใจอย่างหนึ่งของ Objective-C คือวิธีการจัดการพอยน์เตอร์โดยเฉพาะศูนย์ (ศูนย์) ใน Objective-C จะไม่มีอะไรเกิดขึ้นหากคุณพยายามเรียกใช้เมธอดด้วยตัวแปรตัวชี้ที่เป็นศูนย์ (ไม่ได้เริ่มต้น) นิพจน์หรือบรรทัดของโค้ดกลายเป็น no-operation (no-op) และแม้ว่ามันอาจจะดูเป็นประโยชน์ที่จะไม่เกิดความผิดพลาด แต่ก็เป็นแหล่งที่มาของข้อบกพร่องจำนวนมาก การไม่ดำเนินการจะนำไปสู่พฤติกรรมที่คาดเดาไม่ได้ซึ่งเป็นศัตรูของโปรแกรมเมอร์ที่พยายามค้นหาและแก้ไขข้อขัดข้องแบบสุ่มหรือหยุดพฤติกรรมที่เอาแน่เอานอนไม่ได้

ประเภททางเลือกทำให้ความเป็นไปได้ของค่าทางเลือกไม่มีชัดเจนมากใน Swift code ซึ่งหมายความว่าสามารถสร้างข้อผิดพลาดของคอมไพเลอร์เมื่อคุณเขียนโค้ดไม่ถูกต้อง สิ่งนี้จะสร้างลูปข้อเสนอแนะสั้น ๆ และช่วยให้โปรแกรมเมอร์เขียนโค้ดด้วยความตั้งใจ ปัญหาสามารถแก้ไขได้เมื่อเขียนโค้ดซึ่งช่วยลดระยะเวลาและเงินที่คุณจะใช้ในการแก้ไขข้อบกพร่องที่เกี่ยวข้องกับตรรกะของตัวชี้จาก Objective-C ได้อย่างมาก

ตามเนื้อผ้าใน Objective-C หากค่าถูกส่งกลับจากเมธอดโปรแกรมเมอร์มีหน้าที่รับผิดชอบในการบันทึกพฤติกรรมของตัวแปรพอยน์เตอร์ที่ส่งคืน (โดยใช้ข้อคิดเห็นและระเบียบการตั้งชื่อเมธอด) ใน Swift ประเภทที่เป็นทางเลือกและประเภทค่าจะทำให้ชัดเจนอย่างชัดเจนในนิยามวิธีการว่ามีค่าอยู่หรือไม่หรือมีความเป็นไปได้ที่จะเป็นทางเลือก (นั่นคือค่าอาจมีอยู่หรืออาจเป็นศูนย์)

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

4. Swift เป็นหนึ่งเดียวกับการจัดการหน่วยความจำ

Swift รวมภาษาในแบบที่ Objective-C ไม่เคยมี การสนับสนุนสำหรับการนับอ้างอิงอัตโนมัติ (ARC) เสร็จสมบูรณ์ในเส้นทางรหัสขั้นตอนและเชิงวัตถุ ใน Objective-C ARC ได้รับการสนับสนุนภายใน Cocoa APIs และโค้ดเชิงวัตถุ อย่างไรก็ตามไม่มีให้ใช้งานสำหรับโค้ด C และ API ขั้นตอนเช่น Core Graphics ซึ่งหมายความว่าจะกลายเป็นความรับผิดชอบของโปรแกรมเมอร์ในการจัดการหน่วยความจำเมื่อทำงานกับ Core Graphics APIs และ API ระดับต่ำอื่น ๆ ที่มีใน iOS การรั่วไหลของหน่วยความจำขนาดใหญ่ที่โปรแกรมเมอร์สามารถมีได้ใน Objective-C นั้นเป็นไปไม่ได้ใน Swift

โปรแกรมเมอร์ไม่ควรคิดเกี่ยวกับหน่วยความจำสำหรับวัตถุดิจิทัลทุกชิ้นที่ตนสร้างขึ้น เนื่องจาก ARC จัดการการจัดการหน่วยความจำทั้งหมดในเวลาคอมไพล์พลังสมองที่จะไปสู่การจัดการหน่วยความจำจึงสามารถมุ่งเน้นไปที่ตรรกะของแอปหลักและคุณลักษณะใหม่ ๆ แทน เนื่องจาก ARC ใน Swift ทำงานได้ทั้งรหัสขั้นตอนและเชิงวัตถุจึงไม่จำเป็นต้องมีการสลับบริบททางจิตใจสำหรับโปรแกรมเมอร์อีกต่อไปแม้ว่าจะเขียนโค้ดที่สัมผัส API ระดับล่างซึ่งเป็นปัญหากับ Objective-C เวอร์ชันปัจจุบัน

การจัดการหน่วยความจำอัตโนมัติและประสิทธิภาพสูงเป็นปัญหาที่ได้รับการแก้ไขและ Apple พิสูจน์แล้วว่าสามารถเพิ่มผลผลิตได้ ผลข้างเคียงอื่น ๆ คือทั้ง Objective-C และ Swift ไม่ได้รับผลกระทบจาก Garbage Collector ที่กำลังล้างหน่วยความจำที่ไม่ได้ใช้เช่น Java, Go หรือ C # นี่เป็นปัจจัยสำคัญสำหรับภาษาการเขียนโปรแกรมใด ๆ ที่จะใช้สำหรับกราฟิกที่ตอบสนองและการป้อนข้อมูลของผู้ใช้โดยเฉพาะบนอุปกรณ์สัมผัสเช่น iPhone, Apple Watch หรือ iPad (ซึ่งความล่าช้าทำให้น่าหงุดหงิดและทำให้ผู้ใช้รับรู้ว่าแอปเสีย)

5. Swift ต้องใช้รหัสน้อยลง

Swift ลดจำนวนรหัสที่จำเป็นสำหรับคำสั่งซ้ำ ๆ และการจัดการสตริง ใน Objective-C การทำงานกับสตริงข้อความเป็นแบบละเอียดมากและต้องใช้หลายขั้นตอนในการรวมข้อมูลสองส่วนเข้าด้วยกัน Swift ใช้คุณสมบัติภาษาการเขียนโปรแกรมสมัยใหม่เช่นการเพิ่มสองสตริงร่วมกับโอเปอเรเตอร์“ +” ซึ่งไม่มีใน Objective-C การสนับสนุนการรวมอักขระและสตริงเช่นนี้เป็นพื้นฐานสำหรับภาษาโปรแกรมใด ๆ ที่แสดงข้อความต่อผู้ใช้บนหน้าจอ

ระบบประเภทใน Swift ช่วยลดความซับซ้อนของคำสั่งโค้ด - เนื่องจากคอมไพเลอร์สามารถกำหนดประเภทได้ ตัวอย่างเช่น Objective-C ต้องเขียนโปรแกรมเพื่อจดจำราชสกุลสตริงพิเศษ ( %s, %d, %@) และจัดให้มีรายการคั่นด้วยเครื่องหมายจุลภาคของตัวแปรที่จะมาแทนที่แต่ละโทเค็น Swift รองรับการแก้ไขสตริงซึ่งไม่จำเป็นต้องจดจำโทเค็นและช่วยให้โปรแกรมเมอร์สามารถแทรกตัวแปรแบบอินไลน์ไปยังสตริงที่ผู้ใช้หันหน้าเข้าหาผู้ใช้ได้โดยตรงเช่นชื่อป้ายกำกับหรือปุ่ม ชนิดของระบบการอ้างอิงและการแก้ไขสตริงช่วยลดแหล่งที่มาของข้อขัดข้องที่พบบ่อยใน Objective-C

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

6. Swift เร็วกว่า

การทิ้งอนุสัญญา C แบบเดิมได้ปรับปรุง Swift ภายใต้ประทุนอย่างมาก เกณฑ์มาตรฐานสำหรับประสิทธิภาพของรหัส Swift ยังคงชี้ให้เห็นถึงความทุ่มเทของ Apple ในการปรับปรุงความเร็วที่ Swift สามารถเรียกใช้ตรรกะของแอปได้

ตามรายงานของ Primate Labs ผู้ผลิตเครื่องมือประสิทธิภาพ GeekBench ยอดนิยม Swift กำลังเข้าใกล้คุณลักษณะด้านประสิทธิภาพของ C ++ สำหรับงานที่ต้องคำนวณในเดือนธันวาคม 2014 โดยใช้อัลกอริทึม Mandelbrot

ในเดือนกุมภาพันธ์ 2015 Primate Labs ค้นพบว่า Xcode 6.3 Beta ปรับปรุงประสิทธิภาพของอัลกอริทึม GEMM ของ Swift ซึ่งเป็นอัลกอริทึมที่เชื่อมโยงกับหน่วยความจำด้วยการเข้าถึงอาร์เรย์ขนาดใหญ่ตามลำดับโดยมีค่าเท่ากับ 1.4 การใช้งาน FFT เริ่มต้นซึ่งเป็นอัลกอริทึมที่เชื่อมโยงกับหน่วยความจำพร้อมการเข้าถึงแบบสุ่มของอาร์เรย์ขนาดใหญ่มีการปรับปรุงประสิทธิภาพ 2.6 เท่า

พบการปรับปรุงเพิ่มเติมใน Swift โดยใช้แนวทางปฏิบัติที่ดีที่สุดส่งผลให้เพิ่มประสิทธิภาพอัลกอริทึม FFT 8.5 เท่า (ปล่อยให้ C ++ มีประสิทธิภาพที่เพิ่มขึ้นเพียง 1.1 เท่า) การปรับปรุงดังกล่าวยังช่วยให้ Swift มีประสิทธิภาพเหนือกว่า C ++ สำหรับอัลกอริทึม Mandelbrot ด้วยปัจจัยเพียง 1.03

Swift ใกล้เคียงกับ C ++ สำหรับทั้งอัลกอริทึม FFT และ Mandelbrot จากข้อมูลของ Primate Labs ประสิทธิภาพของอัลกอริทึม GEMM ชี้ให้เห็นว่าคอมไพเลอร์ Swift ไม่สามารถกำหนดโค้ดเป็นเวกเตอร์ที่คอมไพเลอร์ C ++ ทำได้ซึ่งเป็นประสิทธิภาพที่เพิ่มขึ้นอย่างง่ายดายที่สามารถทำได้ใน Swift เวอร์ชันถัดไป

7. การชนชื่อกับโครงการโอเพ่นซอร์สน้อยลง

ปัญหาหนึ่งที่ทำให้โค้ด Objective-C ขาดการสนับสนุนอย่างเป็นทางการสำหรับเนมสเปซซึ่งเป็นวิธีแก้ปัญหาของ C ++ ในการชนกันของชื่อไฟล์รหัส เมื่อชื่อนี้ชนกันใน Objective-C มันเป็นข้อผิดพลาดของตัวเชื่อมโยงและแอปไม่สามารถทำงานได้ วิธีแก้ปัญหามีอยู่ แต่อาจมีข้อผิดพลาด หลักการทั่วไปคือการใช้คำนำหน้าสองหรือสามตัวอักษรเพื่อแยกความแตกต่างของรหัส Objective-C ที่เขียนโดย Facebook เทียบกับรหัสของคุณเอง

Swift มีเนมสเปซโดยนัยที่อนุญาตให้มีไฟล์โค้ดเดียวกันในหลายโปรเจ็กต์โดยไม่ทำให้บิวด์ล้มเหลวและต้องการชื่อเช่น NSString (ขั้นตอนต่อไป - บริษัท ของสตีฟจ็อบส์หลังจากถูกไล่ออกจาก Apple) หรือ CGPoint (กราฟิกหลัก) ท้ายที่สุดแล้วคุณลักษณะนี้ใน Swift ช่วยให้โปรแกรมเมอร์มีประสิทธิผลมากขึ้นและหมายความว่าพวกเขาไม่จำเป็นต้องทำบัญชีที่มีอยู่ใน Objective-C คุณสามารถเห็นอิทธิพลของ Swift ด้วยชื่อง่ายๆเช่น Array, Dictionary และ String แทน NSArray, NSDictionary และ NSString ซึ่งเกิดจากการไม่มีเนมสเปซใน Objective-C

ด้วย Swift เนมสเปซจะขึ้นอยู่กับเป้าหมายของไฟล์โค้ด ซึ่งหมายความว่าโปรแกรมเมอร์สามารถแยกความแตกต่างของคลาสหรือค่าโดยใช้ตัวระบุเนมสเปซ การเปลี่ยนแปลงใน Swift นี้มีมาก ช่วยอำนวยความสะดวกอย่างมากในการรวมโครงการโอเพ่นซอร์สกรอบงานและไลบรารีไว้ในโค้ดของคุณ เนมสเปซช่วยให้ บริษัท ซอฟต์แวร์ต่างๆสามารถสร้างชื่อไฟล์รหัสเดียวกันได้โดยไม่ต้องกังวลเกี่ยวกับการชนกันเมื่อรวมโครงการโอเพ่นซอร์ส ตอนนี้ทั้ง Facebook และ Apple สามารถใช้ไฟล์ออบเจ็กต์โค้ดชื่อ FlyingCar.swift ได้โดยไม่มีข้อผิดพลาดหรือการสร้างล้มเหลว

8. Swift รองรับไลบรารีแบบไดนามิก

การเปลี่ยนแปลงที่ใหญ่ที่สุดใน Swift ที่ไม่ได้รับความสนใจมากพอคือการเปลี่ยนจากไลบรารีแบบคงที่ซึ่งได้รับการอัปเดตในรุ่นสำคัญ ๆ (iOS 8, iOS 7 และอื่น ๆ ) เป็นไลบรารีแบบไดนามิก ไลบรารีแบบไดนามิกคือโค้ดที่เรียกใช้งานได้ซึ่งสามารถเชื่อมโยงกับแอพได้ คุณลักษณะนี้ช่วยให้แอป Swift ปัจจุบันสามารถเชื่อมโยงกับเวอร์ชันใหม่ของภาษา Swift ได้เนื่องจากมีการพัฒนาอยู่ตลอดเวลา

นักพัฒนาจะส่งแอปพร้อมกับไลบรารีซึ่งทั้งสองได้รับการลงนามแบบดิจิทัลพร้อมใบรับรองการพัฒนาเพื่อความสมบูรณ์ (สวัสดี NSA) ซึ่งหมายความว่า Swift สามารถพัฒนาได้เร็วกว่า iOS ซึ่งเป็นข้อกำหนดสำหรับภาษาโปรแกรมสมัยใหม่ การเปลี่ยนแปลงไลบรารีทั้งหมดสามารถรวมอยู่ในการอัปเดตล่าสุดของแอปบน App Store และทุกอย่างก็ใช้งานได้จริง

ไม่เคยรองรับไลบรารีแบบไดนามิกบน iOS จนกว่าจะเปิดตัว Swift และ iOS 8 แม้ว่าจะรองรับไลบรารีแบบไดนามิกบน Mac มาเป็นเวลานานแล้วก็ตาม ไลบรารีแบบไดนามิกอยู่ภายนอกของแอปที่เรียกใช้งานได้ แต่รวมอยู่ในชุดแอพที่ดาวน์โหลดจาก App Store จะลดขนาดเริ่มต้นของแอปเมื่อโหลดลงในหน่วยความจำเนื่องจากโค้ดภายนอกจะเชื่อมโยงเมื่อใช้เท่านั้น

ความสามารถในการเลื่อนการโหลดในแอพมือถือหรือแอพฝังตัวบน Apple Watch จะช่วยเพิ่มประสิทธิภาพการรับรู้ของผู้ใช้ นี่เป็นหนึ่งในความแตกต่างที่ทำให้ระบบนิเวศของ iOS ตอบสนองได้ดีขึ้น Apple ให้ความสำคัญกับการโหลดเฉพาะสินทรัพย์ทรัพยากรและตอนนี้รวบรวมและเชื่อมโยงโค้ดได้ทันที การโหลดแบบทันทีจะช่วยลดเวลารอเริ่มต้นจนกว่าทรัพยากรจะต้องแสดงบนหน้าจอจริงๆ