Objective-C Programming Chapter 1

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

เหตุผลที่ผมแจกฟรีคร่าวๆก็คือ

  • หนังสือเขียนโปรแกรมด้วย Objective-C ภาษาไทยตามท้องตลาดยังไม่มี เจอแต่แต่งรูปขึ้น hi5 facebook, การตลาดออนไลน์และอื่นๆ
  • แค่อยากจะให้ประเทศมันพัฒนากว่านี้ ด่าระบบการศึกษา ด่านักการเมืองไปมันก็เท่านั้น ถ้าเราไม่ลงมือทำอะไรสักอย่าง ผมเลยทำหนังสือให้ความรู้คนอื่น
  • อินดี้ไม่เน้นขาย 🙂

หนังสือที่ผมเขียนนั้นเริ่มจากการปูพื้นฐานแบบต้องให้เข้าใจจริงๆว่ามันทำงานอย่างไร แล้วก็ต้องคิดได้ด้วยว่าทำไมต้องเขียนแบบนี้ ไม่ใช่ search หาจาก Google แล้วก็ก๊อปปี้ โดยไม่รู้ว่ามันทำงานอย่างไร ยกตัวอย่างเช่น heap memory กับ stack memory มันต่างกันอย่างไร เชื่อว่าน้อยคนจะตอบได้ ถามง่ายกว่านั้นก็ได้ ผมถามว่า int ในระบบ 64 Bit มีกี่ไบท์ ? อย่างที่บอกไปว่าเราจะโทษระบบการศึกษาไปก็เท่านั้นว่าไม่สอนให้นักเรียนเข้าใจ ผมเลยเขียนอธิบายเอาแบบละเอียดๆเลยว่าอะไรเป็นอะไร ทั้งหมดทั้งปวงก็เขียนจากประสบการณ์และการหาข้อมูลประกอบทั้งใน internet และหนังสือต่างๆ ( แน่นอนผมไม่ได้เก่งและเก๋าขนาดเขียนหนังสือโดยไม่มีการอ้างอิงตำราอื่นๆ )

สำหรับท่านที่เข้ามาอ่าน ติชมแนะนำได้ครับ อ่านเข้าใจยาก รูปผิด เนื้อหาผิด

ขอบคุณครับ
TeR

ปล. สำหรับคนที่เอาบทความของผมไปเผยแพร่ต่อทางเวปของตัวเอง ขอความกรุณาอย่าทำ hotlink

 

Programming in Objective-C

 

Chapter 1  : Super set of C

The Beginning of Story

 

ก่อนจะลงมือเขียนโปรแกรม จะขอเล่าเรื่องราวความเป็นมาของภาษา Objective-C สักเล็กน้อย เชื่อว่าหลายคนคงจะเข้าใจว่า Objective-C เป็นภาษาใหม่ แต่ความจริงแล้วภาษา Objective-C ได้พัฒนาตั้งแต่ปี 1986 ก่อนที่จะมีภาษา Java และ C# เสียอีก วิศวกรสองคนชื่อ Brad Cox และ Tom Love เป็นผู้สร้างภาษานี้ขึ้นมา ทั้งสองคนได้พัฒนาภาษา Objective-C โดยต่อยอดมาจากภาษา C ซึ่งได้เอาแนวคิด Object-Oriented ของภาษา Smalltalk มาใช้และปรับปรุงให้ดีขึ้น อย่างไรก็ตามถึงแม้ว่าภาษา Objective-C ได้พัฒนามาหลายปีแต่ก็ยังไม่ได้เป็นที่รู้จัก จนกระทั่งเมื่อบริษัท NeXT Computer ซึ่งเป็นบริษัทใหม่ของ Steve Jobs ที่ก่อตั้งขึ้นมาหลังจากตัวเองถูกไล่ออกจากบริษัท Apple ได้สิทธิ์มาจากวิศวกรสองคนนี้ หลังจากนั้น NeXT Computer ก็ได้รวม Objective-C มาไว้เป็นส่วนหนึ่งของ GCC Compiler พร้อมกับพัฒนาชุดคำสั่ง รวมถึงสร้างเครื่องมือต่างๆขึ้นมาเพื่อใช้กับคอมพิวเตอร์ของบริษัท และพัฒนาระบบปฏิบัติการของตัวเองมีชื่อว่า NEXTSTEP นี่เป็นเพียงจุดเริ่มต้นของเรื่องราวต่างๆ

ระบบปฎิบัติการ NEXTSTEP เป็นระบบที่ทันสมัย มีกราฟฟิคยูสเซอร์อินเตอร์เฟสสวยงาม และเป็นระบบปฎิบัติการแรกที่มีเว็บบราวเซอร์ แต่คอมพิวเตอร์ของ NeXT นั้นแทบจะขายไม่ออก เพราะคอมพิวเตอร์ของ NeXT มีราคาแพงมากและ NEXTSTEP ก็ใช้ได้แต่เฉพาะกับคอมพิวเตอร์ของ NeXT เท่านั้น เพื่อหาทางขยายฐานผู้ ใช้ในปี 1994 NeXT จึงร่วมกับบริษัท Sun Microsystem พัฒนาชุดคำสั่งและเครื่องมือที่เหมือนกับ NEXTSTEP ในชื่อ OPENSTEP เพื่อใช้กับคอมพิวเตอร์เครื่องอื่นๆที่ไม่ใช่เฉพาะเครื่องของ NeXT เพียงอย่างเดียว แม้ว่า OPENSTEP จะใช้ได้กับเครื่องอื่นๆแต่ก็ยังไม่ได้รับความนิยมสักเท่าไหร่ ถัดมาอีกสองปี Apple ไม่สามารถจะพัฒนาระบบปฎิบัติการของตัวเองได้สำเร็จ จึงได้เข้าซื้อกิจการของ NeXT Computer เพื่อนำ NEXTSTEP/ OPENSTEP มาใช้ในคอมพิวเตอร์ของ Apple และเป็นผลให้ Steve Jobs ได้กลับมาทำงานที่ Apple อีกครั้ง ภายหลังจากการเข้าซื้อกิจการ ทาง Apple ได้นำเอา OPENSTEP/ NEXTSTEP มาพัฒนาระบบปฏิบัติการตัวใหม่ที่มีชื่อว่า Mac OS X และรวมเอาเครื่องมือในการพัฒนาโปรแกรมอย่าง Project Builder และ Interface Builder เข้ามา พร้อมกับพัฒนาชุดคำสั่งใหม่ในชื่อ Cocoa ขึ้นมาใช้งาน ภาษา Objective-C ก็ได้รวมเข้ากับ Mac OS X มาตั้งแต่ตอนนั้น

ภาษา Objective-C ได้รวมเข้ากับ Mac OS X มาตั้งแต่แรก แต่มันก็ยังไม่ได้เป็นภาษาที่นักพัฒนา Mac Application จะเลือกใช้เป็นอันดับแรก เพราะสามารถใช้ภาษา C/C++แทนได้   ทาง Apple พยายามผลักดันให้นักพัฒนาเปลี่ยนมาใช้ Objective-C แต่ Application ยอดนิยมจากค่ายใหญ่ๆอย่าง Adobe Photoshop ใช้ C++ และโปรแกรมของ Apple เองอย่าง Final Cut ก็ยังเขียนด้วย C++ ความนิยมภาษา Objective-C เริ่มขึ้นในปี 2008 Apple ได้ออก iPhone พร้อมกับปล่อยชุดพัฒนา iPhone Application ซึ่งใช้ภาษา Objective-C ในการพัฒนา ทำให้จำนวนนักพัฒนาภาษาพุ่งสูงแบบก้าวกระโดด และตัวภาษาได้ปรับปรุงมาเรื่อยจนกระทั่งปัจจุบันนี้

 

Welcome to Xcode

ภาษา Objective-C สามารถใช้ gcc compiler ผ่าน terminal เพื่อคอมไพล์โปรแกรมได้โดยตรง แต่ก็อาจจะไม่สะดวกมากนัก การใช้เครื่องมือในการเขียนโปรแกรมเป็นทางเลือกดีกว่า เครื่องมือในการเขียนโปรแกรมที่จะใช้ในหนังสือเล่มนี้มีชื่อว่า Xcode ซึ่งสามารถโหลดได้จาก Mac App Store สำหรับผู้ที่ยังไม่ได้ติดตั้ง Xcode ให้โหลดและทำการติดตั้งให้เรียบร้อย หลังจากติดตั้งเสร็จเรียบร้อยแล้ว เราก็จะได้เครื่องไม้เครื่องมืออื่นๆเพิ่มเติมด้วยอย่างเช่น Instrument และ Dashcode เป็นต้น

 

เมื่อเปิดโปรแกรม XCode ขึ้นมาจะเห็นหน้าต่าง Welcome to Xcode เป็นตัวช่วยอำนวยความสะดวกในการสร้างโปรเจค

 

( รูป 1 หน้าต่าง Xcode )

เราสามารถสร้างโปรเจคใหม่ได้จากตัวเลือก Create a new Xcode Project นอกจากนี้ยังมีตัวเลือกอื่นอีกเช่น Connect to a respository เพื่อใช้เชื่อมต่อกับ Source Control เช่น svn , git หรือถ้าต้องการเรียนรู้การใช้งาน Xcode เบื้องต้น ก็สามารถเข้าดูรายละเอียดได้จาก Learn about using Xcode การสร้างโปรเจคขึ้นมาใหม่นอกจากจะทำผ่านที่หน้าต่างนี้แล้ว ยังสามารถสร้างใหม่ได้อีกวิธีโดยการเลือกเมนู File > New > New Project

 

( รูป 2 สร้างโปรเจคใหม่ได้จากเมนู )

 

เราทดลองสร้างโปรเจคใหม่กันดีกว่าครับจะใช้วิธีใดก็ได้ เมื่อเริ่มสร้างโปรเจคใหม่ ก็จะเห็นหน้าต่างให้เลือก template สำหรับโปรเจคที่ต้องการจะสร้าง โดยจะแบ่งออกเป็น 2 ส่วนหลักๆคือ iOS และ Mac OS X และในแต่ส่วนก็จะแบ่งย่อยลงไปอีก เช่น Application , Framework & Library ดังรูป 3

 

(รูป 3 หน้าต่างเลือก template)

 

โปรเจคแรกที่เราจะลงมือสร้างกันก็คือ Command Line Tool  และจะใช้ command line tool นี้เป็น template หลักในหนังสือเล่มนี้ เมื่อเราเลือก template ของโปรเจคเสร็จแล้ว ต่อไปก็ให้กรอกรายละเอียดต่างๆที่ปรากฎ ซึ่งเป็นรายละเอียดปลีกย่อยของโปรเจคที่จะสร้าง เริ่มด้วยช่อง Product Name ให้ใส่ชื่อของโปรเจคที่ต้องการ เช่นโปรเจคนี้เราจะใช้ชื่อว่า HelloWorld

 

(รูป 4 รายละเอียดของโปรเจคที่จะสร้างใหม่ )

ส่วน Company Identifier ในตอนนี้ยังไม่ต้องสนใจให้คงไว้ดังเดิม รายละเอียดที่สำคัญของการสร้างโปรเจคคือต้องเลือก Type ให้เป็นแบบ Foundation เพราะเราต้องการจะสร้างโปรเจคโดยใช้ภาษา Objective-C โปรเจคแบบอื่นๆเช่น Core Service , Core Foundation นั้นเป็นภาษา C โปรเจคที่เป็นภาษา Objective-C มีอยู่สองอย่างก็คือ Core Data และ Foundation แต่ Core Data อยู่นอกเหนือหนังสือเล่มนี้ ยังมีจุดที่สำคัญอีกอย่างก็คือการใช้ Automatic Reference Counting ให้เลือกออก เรายังไม่ได้ใช้ในตอนนี้ ( การใช้ Automatic Reference Counting จะได้ทำในบทหลังๆ ) เมื่อกรอกรายละเอียดต่างๆเรียบร้อยแล้วให้กดที่ Next

 

(รูป 5)

 

จะมีหน้าต่างขึ้นมาถามเราว่าต้องการจะสร้างโปรเจคไว้ที่ไหน ก็ให้เราเลือกไปยังโฟลเดอร์ที่เราต้องการ ส่วนตัวเลือก Create local git repository for this project ให้เลือกออก เนื่องจากหนังสือเล่มนี้ไม่ได้ครอบคลุมการใช้งาน Git เท่านี้ก็เป็นอันเสร็จสิ้นกระบวนการสร้างโปรเจคใหม่ เมื่อสร้างโปรเจคสำเร็จ Xcode จะแสดง workspace windows ซึ่งจะได้อธิบายส่วนประกอบต่างๆกันต่อไป

 

Workspace Windows

หลังจากที่เราได้สร้างโปรเจคขึ้นมาหรือเปิดโปรเจคจะพบกับ Worspace ซึ่งเป็นหน้าต่างหลักในการทำงาน โดยแบ่งออกเป็นส่วนต่างๆที่สำคัญ ได้แก่ Navigation , Toolbar , Editor , Debug และ Utility

 

(รูป 6 Workspace windows)

  1.  Navigation Area รายละเอียดที่แสดงในส่วนนี้จะเปลี่ยนไปตาม Navigator (รูปที่ 7 ) ที่ได้เลือกไว้  ประกอบไปด้วย

 

(รูป 7 Navigator )

 

  • Project Navigator บอกข้อมูลเกี่ยวกับไฟล์ต่างๆที่ใช้ในโปรเจคของเรา เช่น source code , header และ Framework ที่ใช้ในโปรเจคเป็นต้น
  • Symbol Navigator ในส่วนนี้จะบอกข้อมูลเกี่ยวกับ class และ symbol ต่างๆในโปรเจค
  • Search Navigator ใช้ในการค้นหาคำต่างๆ และแสดงคำที่เคยค้นหาก่อนหน้านี้
  • Issue Navigator แสดงความผิดพลาดต่างๆ เช่น error หรือ warning จากการคอมไพล์โปรแกรม
  • Debug Navigator แสดง thread และตัวแปรต่างๆในการ debug ปกติเมื่อเรา debug จะเปลี่ยนมาใช้ navigator นี้โดยอัตโนมัติ
  • Breakpoint Navigator บอกตำแหน่งของ breakpoint ที่ได้วางในโปรเจค
  • Log Navigator แสดงรายงานของการคอมไพล์

(รูป 8 Toolbar)

  1. Toolbar Area ในพื้นที่ส่วนนี้จะประกอบไปด้วย ส่วนที่ใช้งานบ่อยๆอย่างเช่น Run Stop และการจัดการหน้าต่างของ Xcode เช่นการ ปิด/เปิด Debug Area  รวมไปถึงการรายงานผลของการคอมไพล์
  2. Editor Area เป็นพื้นที่สำหรับไว้เขียนโปรแกรม ในส่วนนี้อาจจะเปลี่ยนเป็นแสดงผลอย่างอื่น ก็ได้เช่นในกรณีที่เราเลือก Log Navigator พื้นที่ส่วนนี้ก็จะรายงานผลของการคอมไพล์ ดังรูป

 

(รูป 9 Log Navigator)

  1.  Degug Area เมื่อเราทำการ debug ในพื้นที่ส่วนนี้จะไว้ใช้สำหรับแสดงผลของ console และตัวแปรและค่าต่างๆของโปรแกรม (การใช้ debug area นี้จะอธิบายการใช้งานเพิ่มเติมในบทต่อไป)
  2.  Utility Area จะเปลี่ยนไปตามส่วนต่างๆของ Navigator หรือส่วนที่เรากำลังใช้งาน ( การใช้ template แบบ Command Line Tool นี้แทบจะไม่ได้ใช้ส่วนนี้เลย )

 

Project File Structor

หลังจากการสร้างโปรเจคเสร็จแล้ว Project Navigator จะแสดงไฟล์ที่ใช้ในโปรเจคทั้งหมด

 

 

(รูป 10 Project Navigator)

Project Navigator จะแบ่งไฟล์ออกเป็น 2 สีด้วยกันคือ สีแดงและสีดำ ถ้าไฟล์มีสีแดง แสดงว่า Xcode หาไฟล์นี้ไม่เจอ อาจจะมีการย้าย โดนลบ หรือยังไม่มีไฟล์นี้อยู่ จากรูป 10 จะเห็นว่าในโฟลเดอร์ Products มีไฟล์ HelloWorld เป็นสีแดง แสดงว่ายังไม่มีไฟล์นี้อยู่นั่นก็เพราะว่ายังไม่ได้ทำการคอมไพล์นั่นเอง หากทำการคอมไพล์จะได้ไพล์ HelloWorld ซึ่งเป็นไฟล์โปรแกรมของโปรเจคนี้และหลังจากนั้นไฟล์ก็จะเปลี่ยนเป็นสีดำโดยอัตโนมัติ

 

ไฟล์ที่แสดงใน Project Navigator ที่จำเป็นต้องรู้จัก มีอยู่ด้วยกัน 4 ชนิดคือ

  1. Header File ( .h ) เป็นไฟล์ไว้สำหรับการประกาศคลาสและเมธอดชื่อของไฟล์มักจะเป็นชื่อเดียวกับคลาส เช่นถ้าประกาศ คลาสชื่อ Student ก็จะมี header file ชื่อ Student.h
  2. Source File ( .m ) เป็นไฟล์ที่ไว้เขียนการทำงานของคลาสมักจะมีชื่อเหมือนคลาสเช่น Student.m
  3. Framework & Library คือไลบรารีที่นำมาใช้ใน application เช่น Foundation.framework ถ้าเราใช้ dynamic library อาจจะไฟล์ชนิดอื่นเช่น libx.dylb หรือถ้าเป็น static library ก็จะเป็น libx.a เป็นต้น
  4. Product  คือผลลัพธ์ที่ได้จากโปรเจคนี้ โดยมักจะเป็น application หรือโปรแกรม แต่ถ้าสร้าง Project โดยใช้ template อื่นเช่น Static Library ก็จะได้ Product เป็นไลบรารีแทน

 

เมื่อสร้างโปรเจคใหม่ Xcode จะสร้างโฟลเดอร์บางอย่างอยู่แล้วเช่น Frameworks , Products , Supporting Files เป็นต้น แต่การแสดงที่อยู่ของไฟล์ในโฟเดอร์ต่างๆที่เราเห็นจาก Project Navigator ไม่ได้ไม่ได้เกี่ยวข้องกับที่อยู่จริงของไฟล์ในเครื่องคอมพิวเตอร์แต่อย่างใด เราสามารถสร้างโฟลเดอร์ขึ้นมาได้เอง และจะย้ายไฟล์ใดมาไว้ก็ได้

 

Your First Program ?

ทุกครั้งที่สร้างโปรเจคขึ้นมาใหม่ Xcode มักจะมีโค้ดตัวอย่างให้เรามาอยู่แล้ว และในโปรเจคที่เราสร้างขึ้นมานี้ก็มีโปรแกรมสุดคลาสสิก มาให้ด้วยนั่นก็คือโปรแกรมที่แสดงคำว่า HelloWorld

Program 1.1

 

ยังไม่ต้องไปทำความเข้าอะไรกับโปรแกรม เราจะทำการคอมไพล์และให้โปรแกรมทำงานก่อน โดยให้กดปุ่ม Run ที่อยู่บริเวณ toolbar และดูผลลัพธ์ของโปรแกรมทาง debug area จะเห็นผลดังนี้

 (รูป 11 Console Output)

ยินดีด้วยครับคุณได้สร้างโปรแกรม HelloWorld เสร็จแล้ว ในขณะที่ยังไม่ได้ลงมือเขียนโค้ดใดๆเลย ช่างง่ายดายเสียจริงๆ !

 

Explanation of Your First Program

ก่อนที่จะอธิบายโปรแกรม มาทำความรู้จักไวยากรณ์ (systax) ของภาษากันสักนิด ไม่ว่าจะเป็นภาษาที่เราใช้พูดๆกันเช่นภาษาไทย ภาษาอังกฤษ หรือภาษาใดๆบนโลก ล้วนแต่มีไวยากรณ์ทั้งสิ้น เพราะไวยากรณ์เป็นตัวกำหนดรูปแบบของภาษา อาจจะกล่าวได้ว่าเป็นข้อบังคับของภาษาก็ว่าได้  ฉะนั้นแล้วในภาษาคอมพิวเตอร์เองก็มีไวยากรณ์เหมือนกัน อย่างที่ได้ทราบไปว่าภาษา Objective-C นั้นพัฒนามาจากภาษา C ดังนั้นแล้ว syntax ก็คล้ายๆกับภาษา C ซึ่งมีข้อบังคับที่สำคัญคือ

ทุกคำสั่ง (statement) ต้องจบด้วยเครื่องหมาย ; เสมอ ตัวอักษรพิมพ์เล็กและพิมพ์ใหญ่ถือเป็นคนละตัวกัน

เมื่อรู้ syntax คร่าวๆไปแล้วก็มาดูโค้ดกันต่อเลย จากโปรแกรมที่เขียนไปเจ็ดบรรทัดแรกนั้นเรียกโค้ดส่วนนี้ว่าคอมเมนต์ (comment) ซึ่งคอมเมนต์์นี้จะไม่ถูกคอมไพล์ พูดง่ายๆคือไม่ได้มีส่วนเกี่ยวข้องกับการทำงานของโปรแกรมเลย การเขียนคอมเมนต์์ทำได้อยู่สองแบบ วิธีแรกคือใช้สัญลักษณ์ // นำหน้าบรรทัดที่ต้องการ เช่น

ส่วนวิธีที่สองนั้นจะใช้สัญลักษณ์สองตัวติดกันคือ / และ * เพื่อเป็นการบอกว่า ตั้งแต่ตำแหน่งนี้เป็นต้นไปถือเป็นคอมเมนต์ และจะใช้สัญลักษณ์เดิม เพียงแต่สลับตำแหน่งกันนั่นก็คือ * และ / เพื่อเป็นการบอกจุดสิ้นสุดของคอมเมนต์ เรามักจะใช้วิธีการลักษณะแบบที่สองนี้กับการเขียนคอมเมนต์หลายๆบรรทัด เช่น

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

การเขียนคอมเมนต์์เป็นเรื่องที่ดี แต่ถ้าเขียนคอมเมนต์ไม่ตรงกับการทำงานของโปรแกรม อาจจะกลายเป็นหายนะได้ ดังนั้นเมื่อเราทำการปรับปรุงโค้ดของโปรแกรมก็ควรจะแก้ไขคอมเมนต์ด้วย

 

จากบรรทัดคอมเมนต์ถัดมาคือ

โดยปกติแล้วในการเขียนโปรแกรมจะมีไฟล์ที่เราเขียนขึ้นเองและที่ไม่ได้เขียนขึ้นเองเช่นไฟล์ของระบบหรือ Library ต่างๆ

การเรียกใช้ #import ก็เป็นการบอกคอมไพลเลอร์ว่าให้เอาไฟล์ที่ต้องการใช้งาน เข้ามาคอมไพล์ร่วมกับโปรแกรมที่เราเขียนด้วย จากตัวอย่างโปรแกรม 1.1 ได้รวมเอาไฟล์  Foundation.h เข้ามาใช้เพราะเป็นไฟล์พื้นฐานของระบบและใช้ในการสร้างวัตถุพื้นฐานในโปรแกรม

โปรแกรมทุกโปรแกรมของภาษา Objective-C บังคับให้มี function อย่างน้อยหนึ่งฟังก์ชั่นนั่นคือฟังก์ชั่น main เพราะว่าหลังจากที่ระบบปฏิบัติการได้โหลดโปรแกรมเข้าสู่หน่วยความจำโปรแกรมจะเริ่มทำงานที่ฟังก์ชั่น main เป็นอันดับแรก โปรแกรมอาจจะมีหลายฟังก์ชั่นแต่ทั้งโปรแกรมเราจะมี main ได้เพียงแค่ฟังก์ชั่นเดียวเท่านั้น ส่วนท้ายบรรทัดในเครื่องหมายวงเล็บ int argc , const char* argv[] เรียกว่า command-line argument ในตอนนี้ยังไม่ต้องทำความเข้าใจให้ข้ามไปก่อน

บรรทัดนี้เป็็นการจองหน่วยความจำให้กับ autorelease pool ซึ่ง autorelease pool นี้กว่า 99% ในการเขียนโปรแกรมด้วย Objective-C ต้องมีเสมอ เนื่องจากเป็นส่วนช่วยในการบริหารจัดการหน่วยความจำสำหรับวัตถุต่างๆในโปรแกรม (จะอธิบายเพิ่มเติ่มเกี่ยวกับ autorelease pool ในบทของ memory managment อีกครั้ง)

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

หลังจากที่โปรแกรมได้จองหน่วยความจำให้กับ autorelease pool เมื่อเลิกใช้งานก็ต้องคืนหน่วยความจำที่ถูกใช้ให้กับระบบปฎิบัติการ และบรรทัดสุดท้าย

เป็นการส่งค่าที่ได้หลังจากการทำงานของโปรแกรมให้กับระบบปฎิบัติการ  ถ้าโปรแกรมปิดโดยไม่ได้เกิดข้อผิดพลาดค่าที่ส่งกลับมักจะเป็นค่า 0 แต่ถ้าโปรแกรมปิดตัวเพราะความผิดพลาด เช่นอ่านข้อมูลจากไฟล์ไม่ได้ ก็อาจจะส่งค่าอื่นๆกลับมาแทน และถ้าสังเกตุดูที่ Console จะเห็นบรรทัดสุดท้ายเขียนว่า Program ended with exit code: 0 เพื่อบอกให้เราทราบว่าโปรแกรมได้จบลงด้วยสถานะ 0 ซึ่งเป็นค่าที่ได้จากส่งกลับเมื่อจบโปรแกรมนั่นเอง หลังจากได้ลองคอมไพล์โปรแกรมแรกโดยที่ยังไม่ได้ลงมือเขียนอะไรเลยได้สำเร็จแล้วก็อาจจะรู้สึกไม่ค่อยภูมิใจเท่าไหร่ ต่อไปเราจะลงมือเขียนโปรแกรมด้วยฝีมือเราเอง ให้แก้ไขโปรแกรม 1.1 โดยเพิ่ม NSLog เข้าไปในโปรแกรมของเรา เป็นดังตัวอย่างโปรแกรมที่ 1.2

Program 1.2

 

คงจะเดาได้ใช่ไหมว่าผลลัพธ์ที่ได้จากโปรแกรมจะเป็นอย่างไร ? แน่นอนโปรแกรมจะแสดงผลลัพธ์ดังนี้

Program 1.2 Output
Hello,World!
Hello, Objective-C programming!

อย่าลืมว่าเมื่อจบคำสั่งต้องใส่เครื่องหมาย ; ไม่เช่นนั้นจะเกิด error ได้

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

Program 1.3

 

ลองพิจารณาดูอีกครั้งว่าโปรแกรมจะแสดงผลอย่างไร ?

Program 1.3 Output

Hello…
..1
…2
….3

 

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

สัญลักษณ์ การแสดงผล
\n ขึ้นบรรทัดใหม่ (newline)
\t tab
\\ แสดงสัญลักษณ์ \
\” แสดงสัญลักษณ์ “

 

จากโปรแกรมที่ได้ลองเขียนไปสองสามโปรแกรม น่าจะทำความเข้าใจได้ไม่ยาก ลองฝึกการสร้างโปรเจคและใช้งาน NSLog ให้คล่อง เพราะจำเป็นต้องใช้ในบทต่อๆไป

 

Behind the scene

ก่อนจะข้ามไปยังบทต่อไป ขออธิบายเพิ่มเติมเกี่ยวกับการคอมไพล์โปรแกรมกันสักนิดว่า เบื้องหลังสิ่งที่ Xcode นั้นทำให้เราคืออะไร มีสิ่งใดเกิดขึ้นบ้าง

 

(รูป 12 เบื้องหลังการทำงาน)

 

เมื่อสั่งให้ Build หรือกดปุ่ม Run สิ่งที่จะเกิดอย่างแรกก็คือไฟล์ Header (.h) , Prefix Header (.pch) จะเข้ากระบวนการที่เรียกว่า precompile เพื่อเป็นการเตรียมความพร้อมก่อนเข้าสู่การคอมไพล์ และหลังจากนั้น Source (.m) จะถูกคอมไพล์ด้วยคอมไพลเลอร์เช่น GCC หรือ LLVM และหลังจากกระบวนการคอมไพล์จบลงจะได้ Object Files (.o) ของแต่ละ Source ถ้าโปรเจคของเรามี Source Code หลายไฟล์ก็จะได้ .o มากตามไปด้วย เมื่อการคอมไพล์จบลงคอมไพลเลอร์จะหมดหน้าที่ และส่งมอบหน้าที่ต่อไปให้กับ Linker เพื่อนำ Object Files ทั้งหมดมารวมกัน ถ้าหากมี Library ก็จะถูกนำมารวมด้วยกันและได้เป็นผลลัพธ์สุดท้ายซึ่งก็คือ Execute File นั่นเอง  เห็นได้ว่ากว่าจะได้ออกมาเป็น Program สักตัวมีกระบวนการหลายขั้นตอนและซับซ้อนแต่โชคดีที่เรามีเครื่องมืออย่าง Xcode กระบวนการทั้งหลายเหล่านี้จึงไม่ต้องทำด้วยตัวเอง

 

Summary

ในบทแรกนี้เราได้สร้างโปรเจคใหม่ และได้ใช้งาน Xcode กันไปพอสมควร นอกจากนี้เรายังได้เขียนโปรแกรมอีกสองสามโปรแกรมนับเป็นก้าวแรกของการเริ่มต้นเขียนโปรแกรมด้วยภาษา Objective-C ในบทต่อไปเราจะได้เรียนรู้พื้นฐานต่างๆของภาษา Objective-C เช่นการประกาศตัวแปร หรือค่าคงที่


Mac OS X เป็นระบบฎิบัติการของ Apple ที่พัฒนาขึ้นมาต่อจาก Mac OS 9 แต่ไม่ได้ใช้โค้ดเดียวกัน

ภายหลัง Project Builder ได้เปลี่ยนเป็น Xcode และ Interface Builder ก็ได้รวมกับ Xcode มาตั้งแต่ version 4

นอกจาก Cocoa ยังมี Framework สำหรับภาษา C/C++ ชื่อ Carbon แต่รองรับการทำงานแค่เพียง 32 bit

Template คือรูปแบบโครงสร้างอย่างคร่าวๆ ที่มีการกำหนดค่าบางอย่างมาให้แล้ว ซึ่งช่วยอำนวนความสะดวกให้เราไม่ต้องไปจัดการตั้งค่าต่างๆเหล่านั้น

Automatic Reference Counting ( ARC ) เป็นฟีเจอร์ของ LLVM 3.0 อำนวยความสะดวกในการจัดการหน่วยความจำ

แนะนำให้ผู้อ่านศึกษาการใช้ Source Control เพิ่มเติมไม่ว่าจะเป็น SVN หรือ Git เพราะเป็นเครื่องมือที่ช่วยให้เราสามารถย้อนกลับไปดูโค้ดเก่าๆที่เราเคยแก้ไขไปโดยการเปรียบเทียบกันกับโค้ดปัจจุบัน และยังช่วยในการทำงานเป็นทีมอีกด้วย

เรียกคำสั่งที่มี # ว่า preprocessor directive เช่น #import , #define

ถ้าเคยเขียน C มาก่อนอาจจะงงว่ามี @ นำหน้าข้อความกับไม่มีต่างกันอย่างไร ? ถ้าเขียน @ นำหน้าจะหมายถึง string object ของภาษา Objective-C แต่ถ้าไม่เขียนจะหมายถึง constant string ของภาษา C

 

โหลดแบบ PDF ไปอ่านก็ได้ครับ  Objective-C Chapter 1

 

31 thoughts on “Objective-C Programming Chapter 1”

  1. ผมเป็นมือใหม่ครับ แต่อ่านแล้วรู้สึกไม่ยาก
    เขียนได้ดีมากๆ ครับ กำลังศึกษาด้วยตัวเองครับ
    หนังสือออกมาเมื่อไร จะตามต่อไปครับ

  2. ขอบคุณครับ จากเด็กปี2 มหาลัยเกษตร KU70 SRC จะเขียน แอปลง apple store ให้ได้ก่อน เรียน จบครับ

  3. กำลังจะศึกษา Obj-C พอดี เจอ content ภาษาไทย ช่วยลดเวลาในการศึกษาได้เยอะเลย ขอบคุณมากครับ 🙂

  4. เขียนเสร็จเมื่อไหร่ ผมขออุดหนุนคนแรกเลยนะครับ จัดมาเลย….

  5. ขอบคุณมากๆเลยครับ มีคนแบบพี่เยอะๆประเทศเจริญครับ 🙂

  6. เป็นบทความที่อ่านแล้วเข้าใจง่ายดีครับ เห็นภาพ อ่านมาหลายที่แล้วเล่นเอาเกือบท้อเลยครับ
    ขอบคุณมากครับ อยากให้ประเทศชาติมีคนแบบนี้เยอะๆจัง

  7. มือใหม่โปรแกรมมิ่งเลยครับ เป็นบทความที่อ่านง่ายมากทำความเข้าใจได้ไม่ยาก จากที่อ่านมาหลายๆที่มึนสุดๆเกือบจะท้อไปแล้ว แต่สุดท้ายก็มาเจอที่นี่พอดีทำให้มีกำลังใจกลับมาอีกครั้งนึง ขอบคุณครับ เป็นกำลังใจให้และจะคอยติดตามผลงานนะครับ

  8. ขอบคุณจากใจครับ ผมกำลังเริ่มต้นที่จะเขียน App บนไอโฟน เลยต้องเริ่มศึกษาภาษา Objective-C ขอบคุณบทความของท่านมากนะครับ ทำให้ผมหาจุดเริ่มต้นเจอแล้วครับ

  9. ขอบคุณครับ ทำตามแล้วสงสัยว่า
    NSLog (@”Hello…n..1n…2n….3″)
    พิมพ์ขาดตัว \ ไปรึเปล่าครับ n..1\n..2\n..3

  10. ขอบคุณสำหรับกำลังใจครับ ถ้ามีคำติชมหรือข้อแนะนำอะไรเสนอได้นะครับ ผมจะได้เอาไปปรับปรุ่ง

  11. ขอบคุณมากครับ เป็นกำลังใจให้ครับ สำหรับ “การให้” ^_____^

  12. เมื่อเขียนครบแล้วทำขาย แจ้งด้วยนะครับ จะได้จองสักเล่ม เรื่องแบบนี้หายากมากเลยในศูนย์หนังสือ

  13. ขอบคุณครับ สำหรับบทความดี และตอนนี้กำลังต้องการที่จะเริ่มศึกษาเป็นอย่างมากเลยครับ

  14. ขอบคุณครับ …
    เป็นประโยชน์แก่ ปะตุชน คนรุ่นหลัง อย่างมากครับ
    จริงๆหนังสือภาษาไทยเท่าที่เจอจะมีอยู่เล่มนะครับ ของ อ.รวิทัต (คู่มือเขียน iPhone App)
    ผมก็กำลังศึกษาจากเล่มนั้นอยู่ครับ (นานละ) กำลังงงอย่างแรง …
    อาจเพราะ งานหลักกลางวันเขียน pl/sql กลางคืน change หัวให้คิดแบบ oop เขียน obj c
    มันเป็นอะไรที่เข้ากันดีซะเหลือเกิน ( บ่น ฮ่าๆ )

    ว่าแต่เรื่องขายนี้ถ้าเป็นไปได้ผมก็อยากสนับสนุนนะครับ อาจจะทำเป็นบทๆ
    ส่งเป็น pdf ขายเป็นบทๆไปก็น่าจะโอเค(หมายถึงว่ามีทั้งฟรี+อยากจะเสียตัง) แยก section ขายที่หน้า blog นี้ละ
    อาจจะไม่ได้เยอะ แต่ก็ถือเป็นค่าไฟแล้วกันครับ …

Leave a Reply