Archive

Archive for August, 2012

[Objective-C myNote]

Objective-C เป็น ภาษาที่ใช้เป็นหลักในการพัฒนาโปรแกรมใน  MAC  และ iPhone

บันทึกนี้เหมาะสำหรับ ท่านที่มีประสบประการณ์ ในการเขียนโปรแกรม แล้วและเข้าใจ object-oriented ดี  ไม่เหมาะสำหรับผู้เริ่มหัดเขียนโปรแกรม นะครับ เพราะจะอ่านไม่รู้เรื่อง เอานะครับ ฮะ ฮะ เอิก

เอาว่าถ้า เริ่มศึกษา Objective-C ก็เชิญไปที่นี่ก่อนะครับ  Learn Objective-Cหรือว่าที่นี่ก็น่าจะเป็นที่เริ่มต้นได้เป็นอย่างดี ครับ Cocoadevcentrol.com

สำหรับในบทความเล็ก ๆนี้จะ เป็น บันทึกสั้น ๆ ในเรื่องต่าง ของ Objective-C ดังนี้ครับ

  • Method
  • Accessor
  • การสร้าง Objects  (Creating Objects)
  • การจัดการกับ Memory – Basic Memory Management
  • การออกแบบ class interface – Designing a Class interface
  • Init
  • Dealloc
  • การจัดการกับ memory ,Memory Management (เพิ่มเติม)
  • Logging
  • Properties
  • Calling Methods on Nil
  • Categories

Method

  • การรียกใช้ methods

[ object method];

[ object methodWithInput:input];

  • การ return ค่า จาก method

Output = [object methodWithOutput];
Output = [object methodWithInputAndOutput:input];

ข้อสังเกต นะครับการเรียก method คือการส่ง message ให้ object

การเรียก method ของ class เช่น การเรียก string method ของ NSString class ซึ่ง ให้ค่าเป็น
NSString object

id myObject = [NSString string];

id type หมายถึงตัวแปร myObject สามารถอ้างอิงไปยัง object ใด ๆ   ประมาณ late binding นะครับ  หมายความว่าหากเราเรียก method ที่ NSString ไม่มี ก็ไม่แสดง error ในหว่างทำการ compile
[จากตัวอย่างเป็นวิธีการ สร้าง object ของ Objective-C เขา นะครับ]

NSString* myString = [NSString string];

ครับสำหรับ ตัวอย่างนี้เป็นการ สร้าง object NSString ชี้โดย myString ซึ่งให้เป็น NSString
Compiler จะตรวจสอบได้ หากเรียกใช้ method ที่ไม่มี ใน NSString นะครับ

สังเกตว่า ตัวแปร object ใน Objective-C จะเป็น pointer แต่ id type จากตัวอย่างด้านบนไม่ต้องมี * เพราะมันถูกกำหนดให้เป็น pointer อยู้แล้ว เพราะฉะนั้นไม่ต้องใช้

การเรียก Message แบบ ซ้อน กัน [Nested messages]

[NSString stringWithFormat:[prefs format]];

การเรียก ซ้อนกันก็ไม่ควรเรียกซ้อนกันไม่เกิน  2 message ต่อบรรทัด เพื่อให้สามารถอ่านได้ง่าย

Methods แบบ หลาย Input

เหมือนทั่วไปครับ method สามรถ รับค่าได้ มากกว่า 1 ค่า  ใน Objective-C ก็เช่นเดียวกันแต่ Objective-C นั้น ใช้การแตก ชื่อ method ให้เป็นหลาย ๆ ส่วนเพื่อรับข้อมูล หรือ argument  ดังตัวอย่าง

การประกาศ :
-(BOOL) writeToFile:(NSString *)path atomatically:(BOOL) usAuxilliaryFile;

การเรียกใช้ :
BOOL result = [myData writeToFile:@”/tmp/log.txt” automatically:NO];

ชื่อmethod ก็คือ writeToFile: automatically: ครับ ไม่ใช่ ชื่อ argument นะครับ

Accessor
Instance variable โดย default เป็น private  ในการ กำหนดค่า (set) หรือการรับค่า จาก variable จะต้องใช้ accessors สามารถทำได้ดังนี้ครับ
Traditional 1.x sytax

[photo setCaption:@”Day at the Beach”];
Output = [photo caption];

ครับเราจะเห็นว่าการ ใช้งาน accessor นั้น ก็คือการเรียกใช้ method นั่นเอง
จำไว้ว่าเมื่อใดก็ตามที่เห็น code อยู่ใน square brackets หมายถึง เป็นการส่ง message ให้กับ object หรือ  class นะครับ
จากตัวอย่าง ที่ บรรทัดที่ 2  caption ไม่ได้ นำด้วย get  ใน Objective-C โดยมากจะไม่ใส่ prefix ให้กับ getter ครับ

 Dot syntax
สำหรับ dot syntax สำหรับ getter และ setter นั้น เริ่มมีใน Objective-C 2.0 Mac OS X 10.5 เป็นต้นมาครับ

photo.caption = @”Day at the Beach”;
output = photo.caption;

เราเลือกใช้แบบใดก็ได้นะครับ เลือกเอาซะแบบหนึ่ง นะครับ

การสร้าง Objects  (Creating Objects)

การสร้าง Object ใน Objective-C สามารถทำได้ 2 วิธี
วิธีแรกเป็นวิธีที่เรา แสดงให้เห็นแล้วก่อนหน้านี้

NSString* myString = [NSString string];

วิธีนี้เป็นแบบ automatic style ครับ สร้างโดยการใช้ autoreleased object ซึ่งจะพูดถึงต่อไป หลังจากนนี้ครับ
อีกวิธีหนึ่ง เรียกว่า manual style คือต้อง ทำ release memory เองหลังจากใช้ object แล้ว ครับ

NSString* myString = [[NSString alloc] init];

จาก code เป็นการเรียก method แบบ ซ้อนกัน (nest)
–    Alloc  เพื่อ จ้อง memory และ สร้าง object
–    Init เป็นการ เรียก method ใน object ที่ถูกสร้างขึ้น มักใช้ในการ กำหนดค่าเริ่มต้นต่าง ๆ ในบางกรณี เราใช้ init ที่รับ input ได้ เช่น

NSString* value = [[NSString alloc] initWithFloat:1.0] ;

การจัดการกับ Memory – Basic Memory Management

ถ้าเรา สร้าง object โดยใช้ alloc อย่างที่กล่าวไป เราต้องทำการ release object หลังจาก ใช้เสร็จ ครับ
ตัวอย่างเช่น

// string1 will be released automatically
NSString* string1 = [NSString string];

// must release this when done
NSString* string2 = [[NSString alloc] init];
//..
[string2 release];

การออกแบบ class interface – Designing a Class interface

การสร้าง class มี 2 ส่วนคือ

  • Class interface  เก็บไว้ใน  ClassName.h
    • Define instance variable and public methods
  • Implementation เก็บไว้ใน ClassName.m
    • Actual code
    • Private method ซึ่ง ใช้ภายใน
ตัวอย่าง class ชื่อ photo
#import <Cocoa/Cocoa.h>
@interface Photo : NSObject {
     NSString* caption;
     NSString* photographer;
 }
 @end

–    ใช้ #import directive เพื่อบอก compiler ว่าจะเรียกใช้ library อะไร
–    @interface บอกว่าเป็นการ ประกาศ class ชื่อ photo   colon บอกว่า photo มี superclass เป็นอะไร
–    ใน curly bracket ประกาศ variable 2 ตัว ชื่อ caption, photographer ซึ่งเป็น NSString
–    จบด้วย @end

เอาไว้ต่อกันใน ตอนถัดไปดีไหม ครับ ยาวเกินไปแล้ว

s_teerapong2000@yahoo.com

ธีระพงษ์ ส.

Categories: Objective-C

การใช้งาน jQuery กับ ASP.NET

เหมือนกับว่าผม จะ out อยู่คนเดียวนะครับ หันไปทางไหน ก็ jQuery     jQuery ถูกนำมาใช้กันอย่างกว้างขวางไม่เว้น ASP.NET ของ Microsoft และมีทีท่าว่าจะกลายเป็น partner กันในที่สุด  บทความเล็ก ๆ นี้ของผม จะพาท่านนักพัฒนาทั้งหลายมา รู้จักกับเจ้า jQuery กัน นะครับ

อันที่จริง แล้วผมเองก็ชุลมุนมากมาย มีหลายสิ่งหมลายอย่างที่ต้องจัดการ แต่ก็ยอมไม่ได้ที่จะไม่ได้ แตะ เจ้า jQuery สักนิด สักหน่อย  ฉะนั้นก็เชิญตามมา ดูกันเลยนะครับ
jQuery คืออะไร หนอ
jQuery นั้น เป็น javaScript library แฮะ แฮะ อย่างน้อยก็ไม่ได้มีอะไรแปลกใหม่แล้วหล่ะ แต่เจ้า jQuery นั้นมันมีอะไรมากไปกว่า javaScirpt library ธรรมดา เพราะว่ามัน สนับสนุนการใช้งาน CSS3 และ เป็นที่รู้จักของ browsers ทั้งหลาย   ใช้งานง่าย เร็ว ใช้  DOM ในการเข้าถึง   html documents  และสามารถเพิ่มลูกเล่นให้กับ  element ต่างได้ และอื่น ๆ อีกมากมาย
jQuery และ JavaScript ต่างกันอย่างไร หล่ะ
อื่ม ก็ JavaScript นั้นเป็น language ส่วน jQuery เป็น  library ที่เขียนขึ้นด้วน JavaScript นั่นเอง ครับ

jQuery  ไป download ที่ไหน หรือ และเอามาใช้อย่างไร
การใช้ jQuery นั้น สามารถเรียกใช้ได้หลายลักษณะ กล่าวคือ

ปัจจุบัน Visual studio 2008 สนับสนุน jQuery Intellisense  จาก file ที่เพิ่มเข้ามาใน jQuery ซึ่งสามารถ download ได้ที่ http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6-vsdoc.js

แต่ ถ้าเรา update VS2008 SP1 Hotfix เราจะสามารถทำให้  VS2008 ของเรา สนับสนุนการใช้งาน JavaScirpt file รวมถึง jQuery intellisense ด้วย ซึ่งสามารถ download hotfix ได้ที่ http://archive.msdn.microsoft.com/KB958502/Release/ProjectReleases.aspx?ReleaseId=1736    สามารถ download และ update ได้เลย ซึ่ง จะต้อง เป็น vs2008 sp1 เท่านั้นนะครับ
เอาละครับ ลองมาดูการใช้งานกันเถอะ
สมมุติว่าเรา ลง hotfix แล้วนะครับ  ให้ไป download

แล้วทำตามขั้นตอนต่อไปนี้เลยครับ

  • เปิด Visual studio 2008 > file > New > WebSite > เลือก ASP.NET 3.5 Website จาก template แล้วเลือก ภาษาในการพัฒนาเป็น  C#  เลือก ตำแหน่งที่จะวาง project แล้ว บันทึก
  • Click ขวาที่  project แล้ว  > New folder >  กำหนดชื่อให้เป็น “Scripts”
  • Click ขวาที่ Scripts > Add Existing Item > Browse ไปที่ path ที่เรา download jQuery  (jquery-1.2.6.js )มาวางไว้ และ intellisense document (jquery-1.2.6-vsdoc.js )  เลือก file ทั้งสองแล้ว บันทึก ตามรูป
  • ให้ [ลาก /วาง]  jquery-1.2.6.js จาก solution explorer มาวางไว้ที่ page เพื่อสร้าง reference ดังรูป

  • เนื่องจาก เราได้ลง hotfix แล้ว เราก็ไม่ต้อง add  reference  ที่  jquery-1.2.6-vsdoc.js   อีก  เพราะ visual studio จะค้นหา vsdoc  และ load เอง แค่เราวาง runtime library และ document file ไว้ที่เดียวกันเท่านั้น
  • เพื่อทดสอบ intellisense ให้ พิมพ์  <script> block  แล้ว พิมพ์  “$(“ เราได้เห็น intellesense เหมือนกับที่แสดงตามรุปด้านล่างครับ
  • เป็นอันว่าจบขั้นตอนการ ลงและทดสอบ ครับ

ต่อไปลองมาทดสอบกันดูนะครับ ให้เห็นให้รู้กันไปเลย  ตัวอย่างเป็นตัวอย่างง่าย ๆ คือ click ปุ่มแล้วแสดง  alert window

– ให้ วาง button  ตาม code นะครับ

-แล้วเพิ่ม code ใน script box ดังรูป ครับ

จาก code เราอ้างอิง ชื่อ Button1  ด้วย  #Button1 นะครับ  เมื่อ click ให้แสดง window มีข้อความ Hello world นั่นเอง จะได้ผลตามรูป ครับ

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

ธีระพงษ์ สนะยามาลย์

s_teerapong2000@yahoo.com

Categories: ASP.NET, jQuery