Objective-C Programming Part I.

การเขียนโปรแกรมบน mac ก็อย่างที่บอกไปแล้วว่า มี 2 ภาษาหลักๆคือ c/c++ กับ obj-c ผมคิดว่าถ้าจะเขียน c/c++ programming ก็คิดว่าหนังสือภาษาไทยก็เยอะแล้ว เลยเขียนเกี่ยวกับ objective-c จะดีกว่า เริ่มกันเลยดีกว่า เริ่มจากการสร้าง file นามสกุล .m ขึ้นมาก่อนเช่นเป็นต้นว่าชื่อ hello.m และส่วนข้างใน hello.m ก็มี code แบบนี้

เมื่อเสร็จแล้ว ก็ save แล้วก็เปิด terminal ขึ้นมาแล้วก็สั่ง compile ด้วยคำสั่ง gcc hello.m -o hello -l objc แล้วหลังจากนั้น ก็ ทำการเรียกโปรแกรม ขึ้นมาด้วยคำสั่ง ./hello จะเห็นข้อความว่า

ดังตัวอย่างรูปข้างล่าง

terminal

ก็เป็นอันเรียบร้อยจาก code ตัวอย่าง ถ้าใครเขียนภาษา C/C++ มาก่อนจะเห็นว่ามันแทบจะไม่ต่างกันเลยจะต่างกันก็แค่ #import ถ้าเป็น ภาษา c/c++ จะใช้ #include ส่วนนามสกุลของ source นั้นจะเป็น .m ก็อธิบายตาม code ข้างบนก็คือว่า

  • #import <stdio.h> เป็นการนำ file stdio.h เข้ามาเพื่อที่ว่าเราจะได้สามารถเรียกคำสั่งที่อยู่ภายใน file stdio.h ได้ เป็นต้นว่า printf
  • int main(int argc, const char -argv[] สำหรับบรรทัดนี้ เป็น ส่วนเริ่มต้นของโปรแกรม และการทำงานต่างๆจะอยู่ระหว่าง { กับ }
  • printf(“Hello world!”); เรียกฟังชั่น printf เพื่อที่จะแสดงผลคำว่า Hello world ที่ console
  • return 0; การส่งค่า 0 กลับไปให้ยัง os

และในส่วนของการ compile น้ันเราได้ใช้ gcc เป็นเครื่องมือในการ compile โดยเราได้เรียก  gcc hello.m -o hello -l objc ก็อธิบายได้ว่า

  • -o หมายถึง output ที่ได้จากการ compile ในที่นี้ก็คือ hello
  • -l objc หมายถึงว่า เป็นการ linking กับ Objective-C Runtime library ที่ชื่อว่า objc

จากตัวอย่างข้างต้น จะเห็นว่าเราสามารถเขียนโปรแกรม และ compile ได้โดยไม่ต้องอาศัย เครื่องมือใดๆ นอกจาก gcc และ text editor สักตัว แต่การเขียนโปรแกรมโดยที่ไม่มี Tool หรือ IDE เป็นตัวช่วยเลยนั้น เป็นเรื่องที่ค่อนข้างลำบาก พอสมควร แต่อย่างไรก็ตาม เรามีเครื่องมือที่ช่วยในการเขียนโปรแกรมให้ง่ายขึ้น ที่มาพร้อมกับ mac และยังฟรีอีกด้วย นั่นคือ xcode

สำหรับตอนนี้ก็จบเพียงเท่านี้เหละครับ


Programming on Mac OSX

ภาษาที่ใช้การเขียนโปรแกรม บน Mac OSX นั้นแบ่งออกเป็น หลักๆ สามอย่าง คือ

  • Objective C
  • C/C++
  • ภาษาอื่นๆ เช่น java , php

ปกติแล้วเราจะมักจะคุ้นเคยกับ C/C++ หรือว่า Java , php , perl อะไรแบบนี้ แต่คงไม่เคยได้ยิน Objective-C ( ต่อไปนี้ขอเขียนว่า ObjC ) ในส่วนของ การเขียนโปรแกรมด้วย Obj-C เดี๋ยวจะมาเล่าให้ฟังอีกที แต่โดยหลักๆแล้ว การเขียนโปรแกรม Appliction บน Mac ส่วนมากจะนิยม C/C++ กับ Obj-C ภาษาอื่นๆไม่ค่อยเป็นที่นิยมเท่าไหร่ ( คือส่วนตัวผมแล้ว พวก java หรือว่าอื่นๆมันไม่ใช่ภาษาที่จะเอามาเขียนเป็น App ที่ใช้งานจริงเท่าไหร่ ) เนื่องจากว่า ภาษา C/C++ เองนั้นเป็นที่นิยม และมันเป็นภาษาของแทบจะทุกๆ Platform ที่ต้องมีและ Lib ก็มีให้ใช้เยอะมาก ส่วนภาษา Obj-C เองนั้น ได้พัฒนาโดย NextStep ( บริษัทของ Steve Job ช่วงออกจาก Apple ) เป็นการต่อยอดออกมาอีกทีจากภาษา C

เนื่องจากความนิยมใน 2 ภาษานี้ ( จริงๆผมว่ามันนิยมจริงๆแค่ C/C++ น่ะแต่เนื่องจากว่า ภาษา Obj-C มันเป็นภาาษหลักของ OpenStep แล้ว Apple ก็ไปซื้อ NextStep มาทำให้ Obj-C เป็นที่นิยมมากขึ้น )

ทำให้ Apple มี Frameworkออกมาหลักๆ 2 อันคือ

  • Carbon
  • Cocoa

โดยที่ Carbon นั้นจะเป็นภาษา C/C++ ส่วน Cocoa จะใช้ภาษา Obj-C

ไม่ว่าจะเขียนด้วย C/C++ หรือว่า Obj-C ตัว Framework เองนั้นมีคลาส ให้ใช้มากมายและแทบจะเหมือนกันๆ คือเค้าออกแบบให้มันทำงานได้เหมือนกัน เพียงแต่ว่าชื่อเรียกจะไม่เหมือนกัน แต่เท่าที่ลองๆมา ก็พบว่ามันก็ไม่ได้ต่างกันมาก คือถ้าถามว่าแล้วจะเลือกอะไรดี ผมบอกไม่ได้เหมือนกัน แต่ว่าถ้าเคยเขียน C/C++ มาก่อนอยู่แล้ว ก็น่าจะเลือก Carbon อาจจะเหมาะกว่า แต่ว่าถ้าไม่เคยเขียน C/C++ มาก่อน ผมว่าไปเขียน Obj-C อาจจะง่ายกว่า ก็ได้ แต่ถ้าใครเขียน C/C++ แล้วอยากลองของใหม่ก็ได้น่ะ เพราะว่าเท่าที่เขียนๆมันก็ไม่ได้ต่างจาก C/C++ เท่าไหร่ จะแตกต่างในบางเรื่องก็เท่านั้น แต่ผมว่า Obj-C เรียนรู้ไม่ยากเลย

First word

ผมคิดไว้นานแล้วละครับ ว่าอยากจะเขียน Blog สักอันที่เกี่ยวกับ Mac ( และโดยเฉพาะ เกี่ยวกับ Programming ) แต่ก็ไม่รู้ว่าจะไปเขียนที่ไหนดี เคยใช้ Blogspot ก็ดีน่ะ แต่ว่าอันนั้นมันเขียนแต่เรื่องส่วนตัวไปหน่อย เลยกะว่า Blog นี้จะเอาไว้ทำ เฉพาะเนื้อหาสาระ และเรื่องต่างๆของ Mac และจะเน้นไปทาง Development ซะมากกว่า เผื่อว่าหากมีใครได้เอามันไปใช้ต่อยอด

โดยคาดว่าสิ่งที่อยากจะเอามาเขียนใน Blog นี้ก็น่าจะเป็น

  • Xcode
  • Objective-C
  • C++
  • Unix/Linux/Darwin
  • OpenGL
  • Carbon / Cocoa

เขียนโปรแกรมกันเถิดจะเกิดผล Programming and technology