เครื่องหมายคำนวณ หรือเปรียบเทียบ Classification Operators
Arithmetic + - * / %
Relational Operators < > >= <= == != && || !
Bitwise Operators & | ^ << >> >>> - &= |= ^=
Assignments = += -= /= %=
Bitwise Assignments &= |= <<= >>= >>>= ^=
Ternary Operator
(if...else shorthand) ?:
Increment ++
Decrement --
Google Search
Custom Search
ผลการค้นหา
วันศุกร์ที่ 13 กุมภาพันธ์ พ.ศ. 2552
วันอังคารที่ 10 กุมภาพันธ์ พ.ศ. 2552
ทั่วไปเกี่ยวกับ JaVa
1. ที่มา
เรียบเรียงเพื่อเตรียมสอนจาวาสำหรับผู้เริ่มต้น + การโปรแกรมเชิงวัตถุ
หลังผ่าน SCJP1.4 และ SCJP5 จึงรู้ว่าเว็บเพจนี้ให้ข้อมูลขั้นพื้นฐานเท่านั้น
ทำให้มีเรื่องมากมายต้องถูกปรับปรุง .. ให้ตรงตามทฤษฎีของ Java Certified
ที่ท่านเห็นขณะนี้เป็นเพียงความรู้เบื้องต้น(SL-110) ก่อนถึง SCJP(SL-275)
รู้แค่ที่ผมเขียนไว้ ไม่พอไปสอบ SCJP แน่นอน .. ต้องอ่านมากกว่านี้อีกมาก
Sun Microsystems, Inc. (Download : JDK 6)
- J2SE = Java 2 Platform, Standard Edition :Core/Desktop
- J2EE = Java 2 Platform, Enterprise Edition :Enterprise/Server
- J2ME = Java 2 Platform, Micro Edition :Mobile/Wireless
- JRE = Java Runtime Environment
- JVM = Java Virtual Machine
ประวัติ (History) [wikipedia.org]
Java is a programming language originally developed by Sun Microsystems and released in 1995. Java applications are typically compiled to bytecode, although compilation to native machine code is also possible. At runtime, bytecode is usually either interpreted or compiled to native code for execution, although direct hardware execution of bytecode by a Java processor is also possible.
The language, widely considered to be the most popular platform for web development, derives much of its syntax from C and C++ but has a simpler object model and fewer low-level facilities. JavaScript, a scripting language, shares a similar name and has similar syntax, but is not directly related to Java.
คนจาวา ใจดี
+ narisa.com#
+ thaidev.com
+ exzilla.net
+ au.ac.th
+ yakyaihost.net
+ sunncity.com
+ jarticles.com
+ webthaidd.com
+ คนเขียนเกมขาย
+ ศูนย์ฝึกอบรมเนคเทค
+ thai2learn.com
--------------------------------------------------------------------------------
เกมใน thaibg(pass)
ถ้ามีปัญหาให้ยกเลิก jre
ใน advanced ของ IE
--------------------------------------------------------------------------------
2. ความหมาย (?)
ภาษาจาวา (Java Language) คือ ภาษาโปรแกรมที่ถูกพัฒนาโดยบริษัท ซันไมโครซิสเต็มส์ เป็นภาษาสำหรับเขียนโปรแกรมที่สนับสนุนการเขียนโปรแกรมเชิงวัตถุ (OOP = Object-Oriented Programming) โปรแกรมที่เขียนขึ้นถ้าเป็นคลาสก็จะเป็นต้นแบบของวัตถุสามารถมีเมทธอด (Method) ที่ประกอบด้วยพฤติกรรม (Behavior) รูปพรรณ (Identity) และสถานะ (State)
3. การโปรแกรมเชิงวัตถุ (OOP = Object-Oriented Programming)
การเขียนโปรแกรมที่ประกอบด้วยกลุ่มของวัตถุ(Objects) แต่ละวัตถุจะจัดเป็นกลุ่มในรูปของคลาส ซึ่งแต่ละคลาสอาจมีคุณสมบัติ การปกป้อง (Encapsulation) การสืบทอด (Inheritance) การพ้องรูป (Polymorphism)
แนวคิดของการโปรแกรมเชิงวัตถุ (OOP Concepts) ?
1. การปกป้อง (Encapsulation)
- การรวมกลุ่มของข้อมูล และกลุ่มของโปรแกรม เพื่อการปกป้อง และเลือกตอบสนอง
2. การสืบทอด (Inheritance)
- ยอมให้นำไปใช้ หรือเขียนขึ้นมาทดแทนของเดิม
3. การพ้องรูป (Polymorphism) = Many Shapes
- Overloading มีชื่อโปรแกรมเดียวกัน แต่รายการตัวแปร (Parameter List) ต่างกัน
- Overriding มีชื่อโปรแกรม และตัวแปรเหมือนกัน เพื่อเขียน behavior ขึ้นมาใหม่ ตัวอย่างโปรแกรม
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 class father {
int n_time;
private int to_show (int run_time) {
run_time = n_time + 1;
return run_time;
}
}
class child extends father {
child() {
n_time = 5;
System.out.println(to_show(n_time)); // 7
}
public static void main(String[] a) {
new child();
}
private int to_show (int run_time) {
run_time = n_time + 2;
return run_time;
}
}
Access Level ?
Specifier Class Package Subclass World
public / / / /
protected / / / .
no modifier / / . .
private / . . .
4. กฏของ OOP (Object Oriented Programming)
อาลัน เคร์(Alan Kay) เป็นผู้บุกเบิกแนวความคิดการเขียนโปรแกรมเชิงวัตถุคนหนึ่ง และมีส่วนพัฒนา Small talk ได้เสนอกฎ 5 ข้อของ OOP ไว้ดังนี้
1. ทุกสิ่งเป็นวัตถุ (Everything is an object)
2. โปรแกรมคือกลุ่มของวัตถุที่ส่งข่าวสารบอกกันและกันให้ทำงาน (A program is a bunch(พวง) of objects telling each other what to do by sending messages)
3. แต่ละวัตถุต้องมีหน่วยความจำ และประกอบด้วยวัตถุอื่น (Each object has its own memory made up of other objects)
4. วัตถุต้องจัดอยู่ในประเภทใดประเภทหนึ่ง (Every object has a type)
5. วัตถุประเภทเดียวกันย่อมได้รับข่าวสารเหมือนกัน (All objects of a particular type can receive the same messages) 5. ลักษณะที่ Object หนึ่ง ๆ ต้องมี
Object Model General, UML OOP Coding in Java
State Value of Attribute Value of Variable Value of Variable/Attribute
Behavior Behavior/Action Method Method
Identity Attribute Property Variable/Attribute
6. โครงการจาวาภิวัฒน์ (Javapiwat) (ซิป้าเชียงใหม่)
- หลักสูตร พื้นฐาน ภาษาการโปรแกรมจาวา (SL-110)
- หลักสูตร ภาษาการโปรแกรมจาวา (SL-275) (Java Certification FAQ)
- ตัวอย่างข้อสอบ (JAVA Programmer Quiz)
1. thaiall.com/quiz (ข้อสอบชุดเล็ก เริ่ม 18 กรกฎาคม 2548)
2. thaiall.com/scjp or lampang.thcity.com/scjp (Pactice SCJP)
3. sun.com (Online Quiz for practice เฉลยทันที)
4. wbrogden.com (Applet เหมือนสอบจริง marked ได้)
5. javaranch.com (Text 65 Questions + Online Checking 60 Questions)
6. jchq.net (Text 180 Questions)
7. danchisholm.net (Text 400 Questions)
8. 4tests.com (40 Questions ทำทีละข้อ แล้ว Download ข้อใหม่)
9. รวมเว็บไซต์ข้อสอบโดย SIPA เชียงใหม่
Java Certified Programmer สนับสนุนโดย SIPA สาขาเชียงใหม่
- sipa.or.th, Chiangmai, Java, Animation, Mobile
- รายชื่อผู้ผ่าน Certification 48 มี 144 เรียงคะแนน
- Course CX-310-055 for SCJP 5.0 (sun)
- เตรียมสอบ SCJP 5.0 (MZ)
- เตรียมสอบ SCJP 5.0 (whizlabs.com)
- Slide SCJP 5.0 (Tantalum's Blog Password:ITKMITL)
- Forum for SCJP 5.0 (CX-310-055)
Sun Certified Programmer (Java 2 Platform 1.4)
1. Declarations and Access Control
2. Flow Control, Assertions and Exception Handling
3. Garbage Collection
4. Language Fundamentals
5. Operators and Assignments
6. Overloading, Overriding, Runtime Type & Object Orient.
7. Threads
8. Fundamental Classes in the java.lang package
9. The Collections Framework
Sun Certified Programmer (Java 2 Platform 5.0)
1. Declarations, Initialization and Scoping
2. Flow Control
3. API Contents
4. Concurrency
5. OO Concepts
6. Collections /Generics
7. Fundamentals
ข้อมูลเพิ่มเติมที่ sun.com | janeng.ca ต.ย.ใบรับรอง ของ
Certify Programmer
Score Report
ทราบผลหลังสอบทันที
Click to ... Practice
in thaiall.com website
--------------------------------------------------------------------------------
SCJP
in Applet
beta version
7. เอกสารอ้างอิง Java Language Specification 2.0
อธิบายเป็นบทชัดเจน 18 บท ถูกจัดเรียงเหมือนหนังสือที่อ่านเข้าใจง่าย ตั้งแต่ introduction, grammar ไปถึง syntax เนื้อหาส่วนใหญ่เน้นการอธิบายมากกว่าตัวอย่างโปรแกรม
:: read | download 410 KB API ref. & developer doc.
จำเป็นที่ผู้เรียน Java ต้องอ่านเอกสารชุดนี้ให้เป็น เพราะแต่ละ class มี method ให้ใช้มากมาย และอาจเปลี่ยนไปตามรุ่นของ Compiler สำหรับตัวอย่าง class String มีให้อ่าน และนำไปใช้ได้ทันที
:: read | download 32 MB
8. ตัวอย่างโปรแกรมที่ใช้ Applet
//
import java.applet.*;
import java.awt.*;
public class x extends Applet {
int i = 0;
public void init() { i = 1; repaint(); }
public void start() { i += 10; repaint(); }
public void stop() { i += 100; repaint(); }
public void destroy() { }
public void paint(Graphics g) {
setBackground(new Color(255,255,200));
Font fnt = new Font("Angsana NEW",Font.PLAIN,20);
g.setFont(fnt);
g.drawString(i + "ดูที่นี่",20,20);
}
}
9. Exception java.lang.Object
java.lang.Throwable
java.lang.Error java.lang.Exception
AssertionError, AWTError, CoderMalfunctionError, FactoryConfigurationError, LinkageError, ThreadDeath, TransformerFactoryConfigurationError, VirtualMachineError
--------------------------------------------------------------------------------
Subclas of Exception
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.IndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
--------------------------------------------------------------------------------
class testofexception {
public static void main(String[] args) {
try {
System.out.println(1/0);
}
catch (Exception e) {
System.out.println(e);
}
// java.lang.ArithmeticException: / by zero
}
}
AclNotFoundException, ActivationException, AlreadyBoundException, ApplicationException, AWTException, BackingStoreException, BadLocationException, CertificateException, ClassNotFoundException, CloneNotSupportedException, DataFormatException, DestroyFailedException, ExpandVetoException, FontFormatException, GeneralSecurityException, GSSException, IllegalAccessException, InstantiationException, InterruptedException, IntrospectionException, InvalidMidiDataException, InvalidPreferencesFormatException, InvocationTargetException, IOException, LastOwnerException, LineUnavailableException, MidiUnavailableException, MimeTypeParseException, NamingException, NoninvertibleTransformException, NoSuchFieldException, NoSuchMethodException, NotBoundException, NotOwnerException, ParseException, ParserConfigurationException, PrinterException, PrintException, PrivilegedActionException, PropertyVetoException, RefreshFailedException, RemarshalException, RuntimeException, SAXException, ServerNotActiveException, SQLException, TooManyListenersException, TransformerException, UnsupportedAudioFileException, UnsupportedCallbackException, UnsupportedFlavorException, UnsupportedLookAndFeelException, URISyntaxException, UserException, XAException
10. เจชาร์ป (J#)
เจชาร์ป เป็นผลงานของบริษัทไมโครซอฟท์ แต่มีหลักการ หรือทฤษฎีที่ต่อยอดมาจากภาษาจาวาของบริษัทซัน และเจพลัสพลัส (J++) จึงมีโครงสร้างภาษาเหมือนกัน ดังนั้นผู้ที่เคยศึกษาภาษาจาวาของบริษัทซันมาก่อน จึงสามารถพัฒนาภาษาจาวาด้วยเจชาร์ปได้โดยง่ายภายใต้สภาวแวดล้องของดอทเน็ต แต่ผลการแปลโปรแกรมผ่านเจชาร์ปจะไม่ได้ไบท์โค้ด (Byte Code) หรือแฟ้ม .class เหมือนผลการแปลด้วยตัวแปลภาษาของบริษัทซัน และเจชาร์ปไม่สนับสนุนการพัฒนาแอพเพล็ท (Applet)
นักพัฒนาสามารถใช้งานตัวแปลภาษาในสภาวะแวดล้อมบนวินโดว์ โดยเปิด Microsoft Visual Studio และสร้าง VJ# Console Application เมื่อจัดเก็บโครงงาน (Project) จะสร้างห้อง C:\Documents and Settings \admin \My Documents \Visual Studio 2005 \Projects \ConsoleApplication1 และแฟ้มที่ถูกสร้างขึ้น คือ Program.jsl
แฟ้มหลักสำหรับการเป็นตัวแปลภาษา คือ แฟ้ม vjc.exe (Visual Java Compiler) เก็บอยู่ในห้อง C:\WINDOWS.0 \Microsoft.NET \Framework \v2.0.50727 หากใช้ตัวแปลภาษาตัวนี้เพื่อแปลแฟ้มรหัสต้นฉบับชื่อ Program.jsl ผ่าน DOS Command ในสภาวะแวดล้อมที่เหมาะสมก็จะทำได้ ซึ่งผลจากการแปลแฟ้ม Program.jsl จะได้แฟ้ม Program.exe มีขนาด 4096 Byte มิใช่แฟ้ม Program.class เหมือนภาษาจาวาของบริษัทซัน
ตัวอย่างการแปล
DOS> vjc x.jsl
DOS> vjc x1.jsl x2.jsl /out:app.exe
เรียบเรียงเพื่อเตรียมสอนจาวาสำหรับผู้เริ่มต้น + การโปรแกรมเชิงวัตถุ
หลังผ่าน SCJP1.4 และ SCJP5 จึงรู้ว่าเว็บเพจนี้ให้ข้อมูลขั้นพื้นฐานเท่านั้น
ทำให้มีเรื่องมากมายต้องถูกปรับปรุง .. ให้ตรงตามทฤษฎีของ Java Certified
ที่ท่านเห็นขณะนี้เป็นเพียงความรู้เบื้องต้น(SL-110) ก่อนถึง SCJP(SL-275)
รู้แค่ที่ผมเขียนไว้ ไม่พอไปสอบ SCJP แน่นอน .. ต้องอ่านมากกว่านี้อีกมาก
Sun Microsystems, Inc. (Download : JDK 6)
- J2SE = Java 2 Platform, Standard Edition :Core/Desktop
- J2EE = Java 2 Platform, Enterprise Edition :Enterprise/Server
- J2ME = Java 2 Platform, Micro Edition :Mobile/Wireless
- JRE = Java Runtime Environment
- JVM = Java Virtual Machine
ประวัติ (History) [wikipedia.org]
Java is a programming language originally developed by Sun Microsystems and released in 1995. Java applications are typically compiled to bytecode, although compilation to native machine code is also possible. At runtime, bytecode is usually either interpreted or compiled to native code for execution, although direct hardware execution of bytecode by a Java processor is also possible.
The language, widely considered to be the most popular platform for web development, derives much of its syntax from C and C++ but has a simpler object model and fewer low-level facilities. JavaScript, a scripting language, shares a similar name and has similar syntax, but is not directly related to Java.
คนจาวา ใจดี
+ narisa.com#
+ thaidev.com
+ exzilla.net
+ au.ac.th
+ yakyaihost.net
+ sunncity.com
+ jarticles.com
+ webthaidd.com
+ คนเขียนเกมขาย
+ ศูนย์ฝึกอบรมเนคเทค
+ thai2learn.com
--------------------------------------------------------------------------------
เกมใน thaibg(pass)
ถ้ามีปัญหาให้ยกเลิก jre
ใน advanced ของ IE
--------------------------------------------------------------------------------
2. ความหมาย (?)
ภาษาจาวา (Java Language) คือ ภาษาโปรแกรมที่ถูกพัฒนาโดยบริษัท ซันไมโครซิสเต็มส์ เป็นภาษาสำหรับเขียนโปรแกรมที่สนับสนุนการเขียนโปรแกรมเชิงวัตถุ (OOP = Object-Oriented Programming) โปรแกรมที่เขียนขึ้นถ้าเป็นคลาสก็จะเป็นต้นแบบของวัตถุสามารถมีเมทธอด (Method) ที่ประกอบด้วยพฤติกรรม (Behavior) รูปพรรณ (Identity) และสถานะ (State)
3. การโปรแกรมเชิงวัตถุ (OOP = Object-Oriented Programming)
การเขียนโปรแกรมที่ประกอบด้วยกลุ่มของวัตถุ(Objects) แต่ละวัตถุจะจัดเป็นกลุ่มในรูปของคลาส ซึ่งแต่ละคลาสอาจมีคุณสมบัติ การปกป้อง (Encapsulation) การสืบทอด (Inheritance) การพ้องรูป (Polymorphism)
แนวคิดของการโปรแกรมเชิงวัตถุ (OOP Concepts) ?
1. การปกป้อง (Encapsulation)
- การรวมกลุ่มของข้อมูล และกลุ่มของโปรแกรม เพื่อการปกป้อง และเลือกตอบสนอง
2. การสืบทอด (Inheritance)
- ยอมให้นำไปใช้ หรือเขียนขึ้นมาทดแทนของเดิม
3. การพ้องรูป (Polymorphism) = Many Shapes
- Overloading มีชื่อโปรแกรมเดียวกัน แต่รายการตัวแปร (Parameter List) ต่างกัน
- Overriding มีชื่อโปรแกรม และตัวแปรเหมือนกัน เพื่อเขียน behavior ขึ้นมาใหม่ ตัวอย่างโปรแกรม
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 class father {
int n_time;
private int to_show (int run_time) {
run_time = n_time + 1;
return run_time;
}
}
class child extends father {
child() {
n_time = 5;
System.out.println(to_show(n_time)); // 7
}
public static void main(String[] a) {
new child();
}
private int to_show (int run_time) {
run_time = n_time + 2;
return run_time;
}
}
Access Level ?
Specifier Class Package Subclass World
public / / / /
protected / / / .
no modifier / / . .
private / . . .
4. กฏของ OOP (Object Oriented Programming)
อาลัน เคร์(Alan Kay) เป็นผู้บุกเบิกแนวความคิดการเขียนโปรแกรมเชิงวัตถุคนหนึ่ง และมีส่วนพัฒนา Small talk ได้เสนอกฎ 5 ข้อของ OOP ไว้ดังนี้
1. ทุกสิ่งเป็นวัตถุ (Everything is an object)
2. โปรแกรมคือกลุ่มของวัตถุที่ส่งข่าวสารบอกกันและกันให้ทำงาน (A program is a bunch(พวง) of objects telling each other what to do by sending messages)
3. แต่ละวัตถุต้องมีหน่วยความจำ และประกอบด้วยวัตถุอื่น (Each object has its own memory made up of other objects)
4. วัตถุต้องจัดอยู่ในประเภทใดประเภทหนึ่ง (Every object has a type)
5. วัตถุประเภทเดียวกันย่อมได้รับข่าวสารเหมือนกัน (All objects of a particular type can receive the same messages) 5. ลักษณะที่ Object หนึ่ง ๆ ต้องมี
Object Model General, UML OOP Coding in Java
State Value of Attribute Value of Variable Value of Variable/Attribute
Behavior Behavior/Action Method Method
Identity Attribute Property Variable/Attribute
6. โครงการจาวาภิวัฒน์ (Javapiwat) (ซิป้าเชียงใหม่)
- หลักสูตร พื้นฐาน ภาษาการโปรแกรมจาวา (SL-110)
- หลักสูตร ภาษาการโปรแกรมจาวา (SL-275) (Java Certification FAQ)
- ตัวอย่างข้อสอบ (JAVA Programmer Quiz)
1. thaiall.com/quiz (ข้อสอบชุดเล็ก เริ่ม 18 กรกฎาคม 2548)
2. thaiall.com/scjp or lampang.thcity.com/scjp (Pactice SCJP)
3. sun.com (Online Quiz for practice เฉลยทันที)
4. wbrogden.com (Applet เหมือนสอบจริง marked ได้)
5. javaranch.com (Text 65 Questions + Online Checking 60 Questions)
6. jchq.net (Text 180 Questions)
7. danchisholm.net (Text 400 Questions)
8. 4tests.com (40 Questions ทำทีละข้อ แล้ว Download ข้อใหม่)
9. รวมเว็บไซต์ข้อสอบโดย SIPA เชียงใหม่
Java Certified Programmer สนับสนุนโดย SIPA สาขาเชียงใหม่
- sipa.or.th, Chiangmai, Java, Animation, Mobile
- รายชื่อผู้ผ่าน Certification 48 มี 144 เรียงคะแนน
- Course CX-310-055 for SCJP 5.0 (sun)
- เตรียมสอบ SCJP 5.0 (MZ)
- เตรียมสอบ SCJP 5.0 (whizlabs.com)
- Slide SCJP 5.0 (Tantalum's Blog Password:ITKMITL)
- Forum for SCJP 5.0 (CX-310-055)
Sun Certified Programmer (Java 2 Platform 1.4)
1. Declarations and Access Control
2. Flow Control, Assertions and Exception Handling
3. Garbage Collection
4. Language Fundamentals
5. Operators and Assignments
6. Overloading, Overriding, Runtime Type & Object Orient.
7. Threads
8. Fundamental Classes in the java.lang package
9. The Collections Framework
Sun Certified Programmer (Java 2 Platform 5.0)
1. Declarations, Initialization and Scoping
2. Flow Control
3. API Contents
4. Concurrency
5. OO Concepts
6. Collections /Generics
7. Fundamentals
ข้อมูลเพิ่มเติมที่ sun.com | janeng.ca ต.ย.ใบรับรอง ของ
Certify Programmer
Score Report
ทราบผลหลังสอบทันที
Click to ... Practice
in thaiall.com website
--------------------------------------------------------------------------------
SCJP
in Applet
beta version
7. เอกสารอ้างอิง Java Language Specification 2.0
อธิบายเป็นบทชัดเจน 18 บท ถูกจัดเรียงเหมือนหนังสือที่อ่านเข้าใจง่าย ตั้งแต่ introduction, grammar ไปถึง syntax เนื้อหาส่วนใหญ่เน้นการอธิบายมากกว่าตัวอย่างโปรแกรม
:: read | download 410 KB API ref. & developer doc.
จำเป็นที่ผู้เรียน Java ต้องอ่านเอกสารชุดนี้ให้เป็น เพราะแต่ละ class มี method ให้ใช้มากมาย และอาจเปลี่ยนไปตามรุ่นของ Compiler สำหรับตัวอย่าง class String มีให้อ่าน และนำไปใช้ได้ทันที
:: read | download 32 MB
8. ตัวอย่างโปรแกรมที่ใช้ Applet
//
import java.applet.*;
import java.awt.*;
public class x extends Applet {
int i = 0;
public void init() { i = 1; repaint(); }
public void start() { i += 10; repaint(); }
public void stop() { i += 100; repaint(); }
public void destroy() { }
public void paint(Graphics g) {
setBackground(new Color(255,255,200));
Font fnt = new Font("Angsana NEW",Font.PLAIN,20);
g.setFont(fnt);
g.drawString(i + "ดูที่นี่",20,20);
}
}
9. Exception java.lang.Object
java.lang.Throwable
java.lang.Error java.lang.Exception
AssertionError, AWTError, CoderMalfunctionError, FactoryConfigurationError, LinkageError, ThreadDeath, TransformerFactoryConfigurationError, VirtualMachineError
--------------------------------------------------------------------------------
Subclas of Exception
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.IndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
--------------------------------------------------------------------------------
class testofexception {
public static void main(String[] args) {
try {
System.out.println(1/0);
}
catch (Exception e) {
System.out.println(e);
}
// java.lang.ArithmeticException: / by zero
}
}
AclNotFoundException, ActivationException, AlreadyBoundException, ApplicationException, AWTException, BackingStoreException, BadLocationException, CertificateException, ClassNotFoundException, CloneNotSupportedException, DataFormatException, DestroyFailedException, ExpandVetoException, FontFormatException, GeneralSecurityException, GSSException, IllegalAccessException, InstantiationException, InterruptedException, IntrospectionException, InvalidMidiDataException, InvalidPreferencesFormatException, InvocationTargetException, IOException, LastOwnerException, LineUnavailableException, MidiUnavailableException, MimeTypeParseException, NamingException, NoninvertibleTransformException, NoSuchFieldException, NoSuchMethodException, NotBoundException, NotOwnerException, ParseException, ParserConfigurationException, PrinterException, PrintException, PrivilegedActionException, PropertyVetoException, RefreshFailedException, RemarshalException, RuntimeException, SAXException, ServerNotActiveException, SQLException, TooManyListenersException, TransformerException, UnsupportedAudioFileException, UnsupportedCallbackException, UnsupportedFlavorException, UnsupportedLookAndFeelException, URISyntaxException, UserException, XAException
10. เจชาร์ป (J#)
เจชาร์ป เป็นผลงานของบริษัทไมโครซอฟท์ แต่มีหลักการ หรือทฤษฎีที่ต่อยอดมาจากภาษาจาวาของบริษัทซัน และเจพลัสพลัส (J++) จึงมีโครงสร้างภาษาเหมือนกัน ดังนั้นผู้ที่เคยศึกษาภาษาจาวาของบริษัทซันมาก่อน จึงสามารถพัฒนาภาษาจาวาด้วยเจชาร์ปได้โดยง่ายภายใต้สภาวแวดล้องของดอทเน็ต แต่ผลการแปลโปรแกรมผ่านเจชาร์ปจะไม่ได้ไบท์โค้ด (Byte Code) หรือแฟ้ม .class เหมือนผลการแปลด้วยตัวแปลภาษาของบริษัทซัน และเจชาร์ปไม่สนับสนุนการพัฒนาแอพเพล็ท (Applet)
นักพัฒนาสามารถใช้งานตัวแปลภาษาในสภาวะแวดล้อมบนวินโดว์ โดยเปิด Microsoft Visual Studio และสร้าง VJ# Console Application เมื่อจัดเก็บโครงงาน (Project) จะสร้างห้อง C:\Documents and Settings \admin \My Documents \Visual Studio 2005 \Projects \ConsoleApplication1 และแฟ้มที่ถูกสร้างขึ้น คือ Program.jsl
แฟ้มหลักสำหรับการเป็นตัวแปลภาษา คือ แฟ้ม vjc.exe (Visual Java Compiler) เก็บอยู่ในห้อง C:\WINDOWS.0 \Microsoft.NET \Framework \v2.0.50727 หากใช้ตัวแปลภาษาตัวนี้เพื่อแปลแฟ้มรหัสต้นฉบับชื่อ Program.jsl ผ่าน DOS Command ในสภาวะแวดล้อมที่เหมาะสมก็จะทำได้ ซึ่งผลจากการแปลแฟ้ม Program.jsl จะได้แฟ้ม Program.exe มีขนาด 4096 Byte มิใช่แฟ้ม Program.class เหมือนภาษาจาวาของบริษัทซัน
ตัวอย่างการแปล
DOS> vjc x.jsl
DOS> vjc x1.jsl x2.jsl /out:app.exe
ประวัติความเป็นมาของภาษา PHP
ประวัติความเป็นมาของภาษา PHP
PHP เป็นภาษาจำพวก scripting language คำสั่งต่างๆจะเก็บอยู่ในไฟล์ที่เรียกว่าสคริปต์ (script) และเวลาใช้งานต้องอาศัยตัวแปลชุดคำสั่ง ตัวอย่างของภาษาสคริปก็เช่น JavaScript, Perl เป็นต้น ลักษณะของ PHP ที่แตกต่างจากภาษาสคริปต์แบบอื่นๆ คือ PHP ได้รับการพัฒนาและออกแบบมา เพื่อใช้งานในการสร้างเอกสารแบบ HTML โดยสามารถ สอดแทรกหรือแก้ไขเนื้อหาได้โดยอัตโนมัติ ดังนั้นจึงกล่าวว่า PHP เป็นภาษาที่เรียกว่า server-side หรือ HTML-embedded scripting language เป็นเครื่องมือที่สำคัญชนิดหนึ่ง ที่ช่วยให้เราสามารถสร้างเอกสารแบบ Dynamic HTML ได้อย่างมีประสิทธิภาพและมีลูกเล่นมากขึ้น
ถ้าใครรู้จัก Server Side Include (SSI) ก็จะสามารถเข้าใจการทำงานของ PHP ได้ไม่ยาก สมมุติว่า เราต้องการจะแสดงวันเวลาปัจจุบันที่ผู้เข้ามาเยี่ยมชมเว็บไซด์ในขณะนั้น ในตำแหน่ง ใดตำแหน่งหนึ่งภายในเอกสาร HTML ที่เราต้องการ อาจจะใช้คำสั่งในรูปแบบนี้ เช่น ไว้ในเอกสาร HTML เมื่อ SSI ของ web server มาพบคำสั่งนี้ ก็จะกระทำคำสั่ง date.pl ซึ่งในกรณีนิ้ เป็นสคริปต์ที่เขียนด้วยภาษา perl สำหรับอ่านเวลาจากเครื่องคอมพิวเตอร์ แล้วใส่ค่าเวลาเป็นเอาพุท (output) และแทนที่คำสั่งดังกล่าว ลงในเอกสาร HTML โดยอัตโนมัติ ก่อนที่จะส่งไปยังผู้อ่านอีกทีหนึ่ง
อาจจะกล่าวได้ว่า PHP ได้รับการพัฒนาขึ้นมา เพื่อแทนที่ SSI รูปแบบเดิมๆ โดยให้มีความสามารถ และมีส่วนเชื่อมต่อกับเครื่องมือชนิดอื่นมากขึ้น เช่น ติดต่อกับคลังข้อมูลหรือ database เป็นต้น
PHP ได้รับการเผยแพร่เป็นครั้งแรกในปีค.ศ.1994 จากนั้นก็มีการพัฒนาต่อมาตามลำดับ เป็นเวอร์ชั่น 1 ในปี 1995 เวอร์ชั่น 2 (ตอนนั้นใช้ชื่อว่า PHP/FI) ในช่วงระหว่าง 1995-1997 และเวอร์ชั่น 3 ช่วง 1997 ถึง 1999 จนถึงเวอร์ชั่น 4 ในปัจจุบัน
PHP เป็นผลงานที่เติบโตมาจากกลุ่มของนักพัฒนาในเชิงเปิดเผยรหัสต้นฉบับ หรือ OpenSource ดังนั้น PHP จึงมีการพัฒนาไปอย่างรวดเร็ว และแพร่หลายโดยเฉพาะอย่างยิ่งเมื่อใช้ร่วมกับ Apache Webserver ระบบปฏิบัติอย่างเช่น Linux หรือ FreeBSD เป็นต้น ในปัจจุบัน PHP สามารถใช้ร่วมกับ Web Server หลายๆตัวบนระบบปฏิบัติการอย่างเช่น Windows 95/98/NT เป็นต้น
รายชื่อของนักพัฒนาภาษา PHP ที่เป็นแก่นสำคัญในปัจจุบันมีดังต่อไปนี้
Zeev Suraski, Israel
Andi Gutmans, Israel
Shane Caraveo, Florida USA
Stig Bakken, Norway
Andrey Zmievski, Nebraska USA
Sascha Schumann, Dortmund, Germany
Thies C. Arntzen, Hamburg, Germany
Jim Winstead, Los Angeles, USA
Rasmus Lerdorf, North Carolina, USA
เนื่องจากว่า PHP ไม่ได้เป็นส่วนหนึ่งของตัว Web Server ดังนั้นถ้าจะใช้ PHP ก็จะต้องดูก่อนว่า Web server นั้นสามารถใช้สคริปต์ PHP ได้หรือไม่ ยกตัวอย่างเช่น PHP สามารถใช้ได้กับ Apache WebServer และ Personal Web Server (PWP) สำหรับระบบปฏิบัติการ Windows 95/98/NT
ในกรณีของ Apache เราสามารถใช้ PHP ได้สองรูปแบบคือ ในลักษณะของ CGI และ Apache Module ความแตกต่างอยู่ตรงที่ว่า ถ้าใช้ PHP เป็นแบบโมดูล PHP จะเป็นส่วนหนึ่งของ Apache หรือเป็นส่วนขยายในการทำงานนั่นเอง ซึ่งจะทำงานได้เร็วกว่าแบบที่เป็น CGI เพราะว่า ถ้าเป็น CGI แล้ว ตัวแปลชุดคำสั่งของ PHP ถือว่าเป็นแค่โปรแกรมภายนอก ซึ่ง Apache จะต้องเรียกขึ้นมาทำงานทุกครั้ง ที่ต้องการใช้ PHP ดังนั้น ถ้ามองในเรื่องของประสิทธิ ภาพในการทำงาน การใช้ PHP แบบที่เป็นโมดูลหนึ่งของ Apache จะทำงานได้มีประสิทธิภาพมากกว่า
PHP เป็นภาษาจำพวก scripting language คำสั่งต่างๆจะเก็บอยู่ในไฟล์ที่เรียกว่าสคริปต์ (script) และเวลาใช้งานต้องอาศัยตัวแปลชุดคำสั่ง ตัวอย่างของภาษาสคริปก็เช่น JavaScript, Perl เป็นต้น ลักษณะของ PHP ที่แตกต่างจากภาษาสคริปต์แบบอื่นๆ คือ PHP ได้รับการพัฒนาและออกแบบมา เพื่อใช้งานในการสร้างเอกสารแบบ HTML โดยสามารถ สอดแทรกหรือแก้ไขเนื้อหาได้โดยอัตโนมัติ ดังนั้นจึงกล่าวว่า PHP เป็นภาษาที่เรียกว่า server-side หรือ HTML-embedded scripting language เป็นเครื่องมือที่สำคัญชนิดหนึ่ง ที่ช่วยให้เราสามารถสร้างเอกสารแบบ Dynamic HTML ได้อย่างมีประสิทธิภาพและมีลูกเล่นมากขึ้น
ถ้าใครรู้จัก Server Side Include (SSI) ก็จะสามารถเข้าใจการทำงานของ PHP ได้ไม่ยาก สมมุติว่า เราต้องการจะแสดงวันเวลาปัจจุบันที่ผู้เข้ามาเยี่ยมชมเว็บไซด์ในขณะนั้น ในตำแหน่ง ใดตำแหน่งหนึ่งภายในเอกสาร HTML ที่เราต้องการ อาจจะใช้คำสั่งในรูปแบบนี้ เช่น ไว้ในเอกสาร HTML เมื่อ SSI ของ web server มาพบคำสั่งนี้ ก็จะกระทำคำสั่ง date.pl ซึ่งในกรณีนิ้ เป็นสคริปต์ที่เขียนด้วยภาษา perl สำหรับอ่านเวลาจากเครื่องคอมพิวเตอร์ แล้วใส่ค่าเวลาเป็นเอาพุท (output) และแทนที่คำสั่งดังกล่าว ลงในเอกสาร HTML โดยอัตโนมัติ ก่อนที่จะส่งไปยังผู้อ่านอีกทีหนึ่ง
อาจจะกล่าวได้ว่า PHP ได้รับการพัฒนาขึ้นมา เพื่อแทนที่ SSI รูปแบบเดิมๆ โดยให้มีความสามารถ และมีส่วนเชื่อมต่อกับเครื่องมือชนิดอื่นมากขึ้น เช่น ติดต่อกับคลังข้อมูลหรือ database เป็นต้น
PHP ได้รับการเผยแพร่เป็นครั้งแรกในปีค.ศ.1994 จากนั้นก็มีการพัฒนาต่อมาตามลำดับ เป็นเวอร์ชั่น 1 ในปี 1995 เวอร์ชั่น 2 (ตอนนั้นใช้ชื่อว่า PHP/FI) ในช่วงระหว่าง 1995-1997 และเวอร์ชั่น 3 ช่วง 1997 ถึง 1999 จนถึงเวอร์ชั่น 4 ในปัจจุบัน
PHP เป็นผลงานที่เติบโตมาจากกลุ่มของนักพัฒนาในเชิงเปิดเผยรหัสต้นฉบับ หรือ OpenSource ดังนั้น PHP จึงมีการพัฒนาไปอย่างรวดเร็ว และแพร่หลายโดยเฉพาะอย่างยิ่งเมื่อใช้ร่วมกับ Apache Webserver ระบบปฏิบัติอย่างเช่น Linux หรือ FreeBSD เป็นต้น ในปัจจุบัน PHP สามารถใช้ร่วมกับ Web Server หลายๆตัวบนระบบปฏิบัติการอย่างเช่น Windows 95/98/NT เป็นต้น
รายชื่อของนักพัฒนาภาษา PHP ที่เป็นแก่นสำคัญในปัจจุบันมีดังต่อไปนี้
Zeev Suraski, Israel
Andi Gutmans, Israel
Shane Caraveo, Florida USA
Stig Bakken, Norway
Andrey Zmievski, Nebraska USA
Sascha Schumann, Dortmund, Germany
Thies C. Arntzen, Hamburg, Germany
Jim Winstead, Los Angeles, USA
Rasmus Lerdorf, North Carolina, USA
เนื่องจากว่า PHP ไม่ได้เป็นส่วนหนึ่งของตัว Web Server ดังนั้นถ้าจะใช้ PHP ก็จะต้องดูก่อนว่า Web server นั้นสามารถใช้สคริปต์ PHP ได้หรือไม่ ยกตัวอย่างเช่น PHP สามารถใช้ได้กับ Apache WebServer และ Personal Web Server (PWP) สำหรับระบบปฏิบัติการ Windows 95/98/NT
ในกรณีของ Apache เราสามารถใช้ PHP ได้สองรูปแบบคือ ในลักษณะของ CGI และ Apache Module ความแตกต่างอยู่ตรงที่ว่า ถ้าใช้ PHP เป็นแบบโมดูล PHP จะเป็นส่วนหนึ่งของ Apache หรือเป็นส่วนขยายในการทำงานนั่นเอง ซึ่งจะทำงานได้เร็วกว่าแบบที่เป็น CGI เพราะว่า ถ้าเป็น CGI แล้ว ตัวแปลชุดคำสั่งของ PHP ถือว่าเป็นแค่โปรแกรมภายนอก ซึ่ง Apache จะต้องเรียกขึ้นมาทำงานทุกครั้ง ที่ต้องการใช้ PHP ดังนั้น ถ้ามองในเรื่องของประสิทธิ ภาพในการทำงาน การใช้ PHP แบบที่เป็นโมดูลหนึ่งของ Apache จะทำงานได้มีประสิทธิภาพมากกว่า
ความรู้พื้นฐาน HTML และ PHP เบื้องต้น
ความรู้พื้นฐาน HTML และ PHP เบื้องต้น
PHP OOP เป็นการเขียน โปรแกรมเชิงวัตถุ ที่กำลังเป็นที่นิยมอย่างแพร่หลาย โปรแกรม ASP ในปัจจุบันได้เปลี่ยนโฉมจาก ภาษา script เป็น ASP.NET ซึ่งเป็นโปรแกรมเชิงวัตถุอย่างสมบูรณ์ PHP ก็เช่นเดียวกัน เพราะ OOP ช่วยให้เขียนโปรแกรมได้อย่างสง่างาม ตรวจสอบได้ง่าย สามารถนำโค้ดที่เขียนไว้ กลับมาใช้ใหม่ได้อย่างประหยัด จึงสมควรอย่างยิ่งที่จะต้องทำความเข้าใจเรื่องของ OOP เพื่อเป็นพื้นฐานในการเขียนโปรแกรมขั้นสูงต่อไป
ในบทความนี้ จะพูดถึงหลักการของ OOP ที่ใช้ใน โปรแกรม PHP
ทุกคนคงเคยเรียนเรื่องการหาพื้นที่สี่เหลี่ยมมาแล้ว สูตรการหาพื้นที่ คือ ความยาว X ความสูง ถ้าจะคำนวณหาเส้นรอบรูปก็เอาความยาวกับความสูงคูณด้วย 2 แล้วเอามาบวกกัน ทีนี้สมมติว่า ต้องการเขียนโปรแกรมบนเว็บ ให้คำนวณพื้นที่สี่เหลี่ยม โดยใช้ PHP วิธีที่ง่ายที่สุด คือ การสร้างฟอร์มเพื่อรับค่าความยาว และ ความสูง แล้วใช้ PHP ให้คำนวณหาพื้นที่ ซึ่งจะได้โค้ด ดังนี้
ใช้ HTML สร้างฟอร์มเพื่อรับค่าความยาวและความสูง บันทึกและตั้งชื่อไฟล์ว่า rectangle.html
ความยาว:
ความสูง:
ส่งข้อมูล ">
จากนั้นก็จะสร้างไฟล์ PHP เพื่อรับข้อมูลจาก rectangle.html โดยใช้ชื่อว่า rectangle.php ดังนี้
$w=$_POST["width"]; //รับค่าจากไฟล์ html
$h=$_POST["height"];
$area = $w * $h; // คำนวนพื้นที่
$perimeter = ($w + $h) * 2; // คำนวนเส้นรอบรูป
?>
ความยาว:
ความสูง:
พื้นที่: ตารางหน่วย
เส้นรอบรูป:
จากตัวอย่างข้างต้นแทนที่จะเขียนโปรแกรมให้คำนวณทุกครั้ง อาจจะเขียนเป็นฟังชั่น ให้คำนวณหาพื้นที่และเส้นรอบรอบ แล้วเรียกใช้เมื่อต้องการ
ตัวอย่างต่อไปนี้ เราจะสร้างฟังชั่นเพื่อให้คำนวณพื้นที่และเส้นรอบรูปสี่เหลี่ยม โดยจะสร้างไฟล์ใหม่ใช้ชื่อว่า rect.php ในไฟล์นี้ เราจะเขียนฟังชั่นดังกล่าว ดังนี้
function rect_area($width,$height)
{
return $width * $height;
}
function rect_perim($width,$height)
{
return ($width + $height) * 2;
}
?>
บันทึกไว้ ในไฟล์ชื่อ rect.php
เราจะเรียกใช้ฟังชั่นนี้จากไฟล์ rectangle.php แต่จะแก้ไขใหม่ ไม่ต้องมีการคำนวณ แต่จะเรียกใช้ฟังชั่นจาก rect.php ดังนี้
require('rect.php'); // โหลดไฟล์ที่มีฟังชั่นที่เราสร้างแล้ว
$w=$_POST["width"];
$h=$_POST["height"];
$area = rect_area($w,$h); //เรียกใช้ฟังชั่น คำนวณพื้นที่
$perimeter = rect_perim($w,$h); // เรียกใช้ฟังชั่นคำนวณเส้นรอบรูป
?>
แสดงผล --
จากตัวอย่างข้างต้นแทนที่จะเขียนโปรแกรมให้คำนวณทุกครั้ง อาจจะเขียนเป็นฟังชั่น ให้คำนวณหาพื้นที่และเส้นรอบรอบ แล้วเรียกใช้เมื่อต้องการ ตัวอย่างต่อไปนี้ เราจะสร้างฟังชั่นเพื่อให้คำนวณพื้นที่และเส้นรอบรูปสี่เหลี่ยม โดยจะสร้างไฟล์ใหม่ใช้ชื่อว่า rect.php ในไฟล์นี้ เราจะเขียนฟังชั่นดังกล่าว ดังนี้function rect_area($width,$height) { return $width * $height; } function rect_perim($width,$height) { return ($width + $height) * 2; } ?>บันทึกไว้ ในไฟล์ชื่อ rect.phpเราจะเรียกใช้ฟังชั่นนี้จากไฟล์ rectangle.php แต่จะแก้ไขใหม่ ไม่ต้องมีการคำนวณ แต่จะเรียกใช้ฟังชั่นจาก rect.php ดังนี้ require('rect.php'); // โหลดไฟล์ที่มีฟังชั่นที่เราสร้างแล้ว$w=$_POST["width"];$h=$_POST["height"];$area = rect_area($w,$h); //เรียกใช้ฟังชั่น คำนวณพื้นที่$perimeter = rect_perim($w,$h); // เรียกใช้ฟังชั่นคำนวณเส้นรอบรูป?> แสดงผล -->
ความยาว:
ความสูง:
พื้นที่:
เส้นรอบรูป:
การเขียนโปรแกรมเชิงวัตถุ หรือ OOP คล้ายกับฟังชั่น เพียงแต่เราจะสร้างวัตถุต้นแบบ หรือภาษาของ PHP เรียกว่า CLASS เช่น เราอาจจะสร้าง วัตถุที่เรียกว่า Rectangle โดยให้มันมีการคำนวณหาพื้นที่ และคำนวณหาเส้นรอบรูป ดังนั้น ถ้าเราเรียกใช้ Rectangle และส่งค่า ความยาวและความสูงให้ เราสามารถเรียกค่าพื้นที่ และค่าความยาวเส้นรอบรูปได้เลย
เราจะปรับไฟล์ rect.php เสียใหม่ เพื่อให้ไฟล์นี้ สร้าง CLASS ที่ชื่อว่า Rectangle ดังนี้
class Rectangle
{
var $width;
var $height;
function Rectangle($width, $height)
{
$this->width = $width;
$this->height = $height;
}
function area()
{
return $this->width * $this->height;
}
function perimeter()
{
return ($this->width + $this->height) * 2;
}
}
?>
เรามาดูรายละเอียดทีละบรรทัด
เราเริ่มจากการบอกว่า ต่อไปนี้เราจะสร้างแม่แบบ หรือ CLASS ที่ชื่อว่า Rectangle
class Rectangle
{
ชื่อของ CLASS เรามักจะขึ้นต้นด้วยอักษรตัวใหญ่ PHP ไม่บังคับว่าจะต้องเป็นตัวใหญ่ แต่ทำให้เหมือน ๆ กับชาวบ้านก็จะดี เพราะจะเข้าใจกันได้ง่ายขึ้น
ต่อมาเรา ประกาศชื่อตัวแปร คือ $width และ $height
var $width;
var $height;
นี่เป็นการประกาศตัวแปรที่อยู่ในวัตถุที่เรากำลังสร้าง เท่ากับเป็นการพูดว่า เจ้าสี่เหลี่ยมที่จะสร้างขึ้นจากแม่แบบ (CLASS) อันนี้ทุกรูป จะมีความยาว และความสูง ลักษณะที่กำหนดให้วัตถุอย่างนี้ ศัพท์ทาง PHP เรียกว่าเป็น Properties คือหมายถึง คุณสมบัติของวัตถุหรือ Object ซึ่งในที่นี้ก็คือรูปสี่เหลี่ยมที่เกิดจากแม่แบบที่เรากำลังสร้างนี้ทุกรูป ที่จะต้องมี นั่นคือ รูปสี่เหลี่ยมที่เกิดจากแม่แบบ หรือ CLASS นี้ทุกรูป จะมีความกว้างและความยาว
ต่อจากนั้นก็เป็นการสร้างฟังชั่น ให้คำนวณ หาพื้นที่
function Rectangle($width, $height)
{
ขอให้สังเกตว่า ชื่อฟังชั่น Rectangle เป็นชื่อเดียวกับชื่อของแม่แบบ หรือ CLASS พร้อมทั้งกำหนดตัวแปรเอาไว้ด้วย 2 ตัว คือ $width และ $height ฟังชั่นที่มีชื่อเดียวกับชื่อ CLASS นี้ เราเรียกว่าเป็น ตัวสร้าง หรือ constructor
หน้าที่หลักของ constructor คือการกำหนดค่าต่าง ๆ ให้วัตถุ และพร้อมที่จะเรียกใช้งาน ในกรณีของเรา เราจะกำหนดค่า ความยาวและความสูงให้แก่ constructor ของเรา ดังนี้
$this->width = $width;
$this->height = $height;
ตัวแปร $this ในที่นี้หมายถึง วัตถุที่เรากำลังสร้างขึ้น ดังนั้น $this->width = $width;
จึงหมายถึง ความกว้างของวัตถุที่เรากำลังสร้างขึ้นนี้ เท่ากับ ตัวแปรความกว้าง(ที่กำหนดไว้ข้างต้น ซึ่งเป็นตัวแปรที่รับค่าที่ส่งเข้ามา)
เครื่องหมาย -> แสดงความเป็นเจ้าของ เช่น $this->width หมายถึง ความกว้างของวัตถุที่เรากำลังสร้างขึ้นนี้
ต่อจากนั้นก็เป็นฟังชั่นการหาพื้นที่และคำนวณเส้นรอบรูป
function area()
{
return $this->width * $this->height;
}
function perimeter()
{
return ($this->width + $this->height) * 2;
}
ดูเผิน ๆ ฟังชั่นนี้คล้ายกับฟังขั่น rect_area และ rect_perim เพียงแต่เราไม่ได้ส่งค่าอะไรไปให้เท่านั้น เพราะค่าความยาวและความสูงของวัตถุที่เรากำลังสร้างมีอยู่แล้ว เรียกใช้ได้ทันที
ฟังชั่นของวัตถุที่มีอยู่ประจำตัวในลักษณะนี้ เราเรียกว่าเป็น methods หรือวิธีการ ซึ่งเป็นการคำนวณหาค่าต่าง ๆ โดยใช้คุณสมบัติหรือ properties ของวัตถุที่มีอยู่
ทั้งหมดที่กล่าวมา เป็นการวางแม่แบบว่า จะใช้สร้างรูปสี่เหลี่ยมที่มีคุณสมบัติ (properties) 2 ประการคือ ความกว้างและความสูง และสี่เหลี่ยมที่สร้างนี้ จะมีวิธีการ (methods) ให้คำนวณหาค่าพื้นที่ และค่าความยาวรอบรูป
แต่นั่นเป็นเพียงแค่แม่แบบ ยังไม่ใช่ตัวจริง การเรียกใช้แม่แบบ เรียกได้ดังนี้
new Rectangle(20, 5)
เราใช้คำว่า new เพื่อบอก PHP ว่า ให้สร้างวัตถุใหม่(new object) จากแม่แบบ (class) ที่ชื่อว่า Rectangle พร้อมกันนั้นเราก็ส่งค่า ความยาว และ ความสูง ไปให้ด้วย เพราะเป็นคุณสมบัติที่สี่เหลี่ยมที่เรากำหนดว่าจะต้องมีคุณสมบัตินี้ ค่าที่ส่งไปคือ ความกว้าง 20 และความสูง = 5
วัตถุที่เราสร้างจากแม่แบบ Rectangle ต้องมีชื่อ เราจะเอาวัตถุใหม่ที่สร้างมาไว้ในตัวแปรวัตถุขอบเรา ซึ่งจะใช้ชื่อว่า $myRectangle ดังนี้
$myRectangle = new Rectangle(20, 5);
ถ้าต้องการเปลี่ยนค่าความกว้าง ก็สามารถทำได้เลย เช่น ต้องการเปลี่ยนค่าความกว้างเป็น 50 ทำดังนี้
$myRectangle -> width = 50;
ถ้าต้องการหาพื้นที่ ก็สั่งได้โดยตรง เพราะรูปสี่เหลี่ยมใหม่ของเรา คือ myRectangle มีวิธีการหาพื้นที่อยู่แล้ว เพราะสร้างมาจากแม่แบบที่เรากำหนดไว้ตอนแรก
echo $myRectangle -> area(); // ในที่นี้จะพิมพ์ 250 คือ กว้าง 50 และสูง = 5
เราสามารถสร้างสี่เหลี่ยมและหาพื้นที่ได้อีกหลาย รูป เช่น
$rectangle1 = new Rectangle(10,20);
$rectangle2 = new Rectangle(30,40);
echo $rectangle1 ->area(); // ได้ค่า '200'
echo $rectangle2->perimeter(); // ได้ค่า '140'
เพื่อให้เห็นภาพรวมทั้งหมด จะเปลี่ยนไฟล์เดิมคือ rectangle.php ให้สร้างรูปสี่เหลี่ยมจากแม่แบบ และให้พิมพ์ค่าพื้นที่ พร้อมทั้งเส้นรอบรูป ดังนี้
require('rect.php');
$w = $_POST["width"];
$h = $_POST["height"];
$myRectangle = new Rectangle($w,$h);
?>
ความยาว: width?>
ความสูง: height?>
พื้นที่: area()?>
เส้นรอบรูป: perimeter()?>
จะเห็นว่า OOP ช่วยให้เราสามารถใช้แม่แบบ หรือ CLASS สร้าง วัตถุ (objects) ได้อีกจำนวนมาก โดยใช้โค้ดของเดิม ทำให้ดูง่ายไม่ยุ่งยาก แต่ทั้งหมดนี้เป็นเพียงพื้นฐานเบื้องต้นเท่านั้น แต่เพียงพอที่จะเป็นพื้นฐานในการศึกษาต่อไป
PHP OOP เป็นการเขียน โปรแกรมเชิงวัตถุ ที่กำลังเป็นที่นิยมอย่างแพร่หลาย โปรแกรม ASP ในปัจจุบันได้เปลี่ยนโฉมจาก ภาษา script เป็น ASP.NET ซึ่งเป็นโปรแกรมเชิงวัตถุอย่างสมบูรณ์ PHP ก็เช่นเดียวกัน เพราะ OOP ช่วยให้เขียนโปรแกรมได้อย่างสง่างาม ตรวจสอบได้ง่าย สามารถนำโค้ดที่เขียนไว้ กลับมาใช้ใหม่ได้อย่างประหยัด จึงสมควรอย่างยิ่งที่จะต้องทำความเข้าใจเรื่องของ OOP เพื่อเป็นพื้นฐานในการเขียนโปรแกรมขั้นสูงต่อไป
ในบทความนี้ จะพูดถึงหลักการของ OOP ที่ใช้ใน โปรแกรม PHP
ทุกคนคงเคยเรียนเรื่องการหาพื้นที่สี่เหลี่ยมมาแล้ว สูตรการหาพื้นที่ คือ ความยาว X ความสูง ถ้าจะคำนวณหาเส้นรอบรูปก็เอาความยาวกับความสูงคูณด้วย 2 แล้วเอามาบวกกัน ทีนี้สมมติว่า ต้องการเขียนโปรแกรมบนเว็บ ให้คำนวณพื้นที่สี่เหลี่ยม โดยใช้ PHP วิธีที่ง่ายที่สุด คือ การสร้างฟอร์มเพื่อรับค่าความยาว และ ความสูง แล้วใช้ PHP ให้คำนวณหาพื้นที่ ซึ่งจะได้โค้ด ดังนี้
ใช้ HTML สร้างฟอร์มเพื่อรับค่าความยาวและความสูง บันทึกและตั้งชื่อไฟล์ว่า rectangle.html
ความยาว:
ความสูง:
ส่งข้อมูล ">
จากนั้นก็จะสร้างไฟล์ PHP เพื่อรับข้อมูลจาก rectangle.html โดยใช้ชื่อว่า rectangle.php ดังนี้
$w=$_POST["width"]; //รับค่าจากไฟล์ html
$h=$_POST["height"];
$area = $w * $h; // คำนวนพื้นที่
$perimeter = ($w + $h) * 2; // คำนวนเส้นรอบรูป
?>
ความยาว:
ความสูง:
พื้นที่: ตารางหน่วย
เส้นรอบรูป:
จากตัวอย่างข้างต้นแทนที่จะเขียนโปรแกรมให้คำนวณทุกครั้ง อาจจะเขียนเป็นฟังชั่น ให้คำนวณหาพื้นที่และเส้นรอบรอบ แล้วเรียกใช้เมื่อต้องการ
ตัวอย่างต่อไปนี้ เราจะสร้างฟังชั่นเพื่อให้คำนวณพื้นที่และเส้นรอบรูปสี่เหลี่ยม โดยจะสร้างไฟล์ใหม่ใช้ชื่อว่า rect.php ในไฟล์นี้ เราจะเขียนฟังชั่นดังกล่าว ดังนี้
function rect_area($width,$height)
{
return $width * $height;
}
function rect_perim($width,$height)
{
return ($width + $height) * 2;
}
?>
บันทึกไว้ ในไฟล์ชื่อ rect.php
เราจะเรียกใช้ฟังชั่นนี้จากไฟล์ rectangle.php แต่จะแก้ไขใหม่ ไม่ต้องมีการคำนวณ แต่จะเรียกใช้ฟังชั่นจาก rect.php ดังนี้
require('rect.php'); // โหลดไฟล์ที่มีฟังชั่นที่เราสร้างแล้ว
$w=$_POST["width"];
$h=$_POST["height"];
$area = rect_area($w,$h); //เรียกใช้ฟังชั่น คำนวณพื้นที่
$perimeter = rect_perim($w,$h); // เรียกใช้ฟังชั่นคำนวณเส้นรอบรูป
?>
แสดงผล --
จากตัวอย่างข้างต้นแทนที่จะเขียนโปรแกรมให้คำนวณทุกครั้ง อาจจะเขียนเป็นฟังชั่น ให้คำนวณหาพื้นที่และเส้นรอบรอบ แล้วเรียกใช้เมื่อต้องการ ตัวอย่างต่อไปนี้ เราจะสร้างฟังชั่นเพื่อให้คำนวณพื้นที่และเส้นรอบรูปสี่เหลี่ยม โดยจะสร้างไฟล์ใหม่ใช้ชื่อว่า rect.php ในไฟล์นี้ เราจะเขียนฟังชั่นดังกล่าว ดังนี้function rect_area($width,$height) { return $width * $height; } function rect_perim($width,$height) { return ($width + $height) * 2; } ?>บันทึกไว้ ในไฟล์ชื่อ rect.phpเราจะเรียกใช้ฟังชั่นนี้จากไฟล์ rectangle.php แต่จะแก้ไขใหม่ ไม่ต้องมีการคำนวณ แต่จะเรียกใช้ฟังชั่นจาก rect.php ดังนี้ require('rect.php'); // โหลดไฟล์ที่มีฟังชั่นที่เราสร้างแล้ว$w=$_POST["width"];$h=$_POST["height"];$area = rect_area($w,$h); //เรียกใช้ฟังชั่น คำนวณพื้นที่$perimeter = rect_perim($w,$h); // เรียกใช้ฟังชั่นคำนวณเส้นรอบรูป?> แสดงผล -->
ความยาว:
ความสูง:
พื้นที่:
เส้นรอบรูป:
การเขียนโปรแกรมเชิงวัตถุ หรือ OOP คล้ายกับฟังชั่น เพียงแต่เราจะสร้างวัตถุต้นแบบ หรือภาษาของ PHP เรียกว่า CLASS เช่น เราอาจจะสร้าง วัตถุที่เรียกว่า Rectangle โดยให้มันมีการคำนวณหาพื้นที่ และคำนวณหาเส้นรอบรูป ดังนั้น ถ้าเราเรียกใช้ Rectangle และส่งค่า ความยาวและความสูงให้ เราสามารถเรียกค่าพื้นที่ และค่าความยาวเส้นรอบรูปได้เลย
เราจะปรับไฟล์ rect.php เสียใหม่ เพื่อให้ไฟล์นี้ สร้าง CLASS ที่ชื่อว่า Rectangle ดังนี้
class Rectangle
{
var $width;
var $height;
function Rectangle($width, $height)
{
$this->width = $width;
$this->height = $height;
}
function area()
{
return $this->width * $this->height;
}
function perimeter()
{
return ($this->width + $this->height) * 2;
}
}
?>
เรามาดูรายละเอียดทีละบรรทัด
เราเริ่มจากการบอกว่า ต่อไปนี้เราจะสร้างแม่แบบ หรือ CLASS ที่ชื่อว่า Rectangle
class Rectangle
{
ชื่อของ CLASS เรามักจะขึ้นต้นด้วยอักษรตัวใหญ่ PHP ไม่บังคับว่าจะต้องเป็นตัวใหญ่ แต่ทำให้เหมือน ๆ กับชาวบ้านก็จะดี เพราะจะเข้าใจกันได้ง่ายขึ้น
ต่อมาเรา ประกาศชื่อตัวแปร คือ $width และ $height
var $width;
var $height;
นี่เป็นการประกาศตัวแปรที่อยู่ในวัตถุที่เรากำลังสร้าง เท่ากับเป็นการพูดว่า เจ้าสี่เหลี่ยมที่จะสร้างขึ้นจากแม่แบบ (CLASS) อันนี้ทุกรูป จะมีความยาว และความสูง ลักษณะที่กำหนดให้วัตถุอย่างนี้ ศัพท์ทาง PHP เรียกว่าเป็น Properties คือหมายถึง คุณสมบัติของวัตถุหรือ Object ซึ่งในที่นี้ก็คือรูปสี่เหลี่ยมที่เกิดจากแม่แบบที่เรากำลังสร้างนี้ทุกรูป ที่จะต้องมี นั่นคือ รูปสี่เหลี่ยมที่เกิดจากแม่แบบ หรือ CLASS นี้ทุกรูป จะมีความกว้างและความยาว
ต่อจากนั้นก็เป็นการสร้างฟังชั่น ให้คำนวณ หาพื้นที่
function Rectangle($width, $height)
{
ขอให้สังเกตว่า ชื่อฟังชั่น Rectangle เป็นชื่อเดียวกับชื่อของแม่แบบ หรือ CLASS พร้อมทั้งกำหนดตัวแปรเอาไว้ด้วย 2 ตัว คือ $width และ $height ฟังชั่นที่มีชื่อเดียวกับชื่อ CLASS นี้ เราเรียกว่าเป็น ตัวสร้าง หรือ constructor
หน้าที่หลักของ constructor คือการกำหนดค่าต่าง ๆ ให้วัตถุ และพร้อมที่จะเรียกใช้งาน ในกรณีของเรา เราจะกำหนดค่า ความยาวและความสูงให้แก่ constructor ของเรา ดังนี้
$this->width = $width;
$this->height = $height;
ตัวแปร $this ในที่นี้หมายถึง วัตถุที่เรากำลังสร้างขึ้น ดังนั้น $this->width = $width;
จึงหมายถึง ความกว้างของวัตถุที่เรากำลังสร้างขึ้นนี้ เท่ากับ ตัวแปรความกว้าง(ที่กำหนดไว้ข้างต้น ซึ่งเป็นตัวแปรที่รับค่าที่ส่งเข้ามา)
เครื่องหมาย -> แสดงความเป็นเจ้าของ เช่น $this->width หมายถึง ความกว้างของวัตถุที่เรากำลังสร้างขึ้นนี้
ต่อจากนั้นก็เป็นฟังชั่นการหาพื้นที่และคำนวณเส้นรอบรูป
function area()
{
return $this->width * $this->height;
}
function perimeter()
{
return ($this->width + $this->height) * 2;
}
ดูเผิน ๆ ฟังชั่นนี้คล้ายกับฟังขั่น rect_area และ rect_perim เพียงแต่เราไม่ได้ส่งค่าอะไรไปให้เท่านั้น เพราะค่าความยาวและความสูงของวัตถุที่เรากำลังสร้างมีอยู่แล้ว เรียกใช้ได้ทันที
ฟังชั่นของวัตถุที่มีอยู่ประจำตัวในลักษณะนี้ เราเรียกว่าเป็น methods หรือวิธีการ ซึ่งเป็นการคำนวณหาค่าต่าง ๆ โดยใช้คุณสมบัติหรือ properties ของวัตถุที่มีอยู่
ทั้งหมดที่กล่าวมา เป็นการวางแม่แบบว่า จะใช้สร้างรูปสี่เหลี่ยมที่มีคุณสมบัติ (properties) 2 ประการคือ ความกว้างและความสูง และสี่เหลี่ยมที่สร้างนี้ จะมีวิธีการ (methods) ให้คำนวณหาค่าพื้นที่ และค่าความยาวรอบรูป
แต่นั่นเป็นเพียงแค่แม่แบบ ยังไม่ใช่ตัวจริง การเรียกใช้แม่แบบ เรียกได้ดังนี้
new Rectangle(20, 5)
เราใช้คำว่า new เพื่อบอก PHP ว่า ให้สร้างวัตถุใหม่(new object) จากแม่แบบ (class) ที่ชื่อว่า Rectangle พร้อมกันนั้นเราก็ส่งค่า ความยาว และ ความสูง ไปให้ด้วย เพราะเป็นคุณสมบัติที่สี่เหลี่ยมที่เรากำหนดว่าจะต้องมีคุณสมบัตินี้ ค่าที่ส่งไปคือ ความกว้าง 20 และความสูง = 5
วัตถุที่เราสร้างจากแม่แบบ Rectangle ต้องมีชื่อ เราจะเอาวัตถุใหม่ที่สร้างมาไว้ในตัวแปรวัตถุขอบเรา ซึ่งจะใช้ชื่อว่า $myRectangle ดังนี้
$myRectangle = new Rectangle(20, 5);
ถ้าต้องการเปลี่ยนค่าความกว้าง ก็สามารถทำได้เลย เช่น ต้องการเปลี่ยนค่าความกว้างเป็น 50 ทำดังนี้
$myRectangle -> width = 50;
ถ้าต้องการหาพื้นที่ ก็สั่งได้โดยตรง เพราะรูปสี่เหลี่ยมใหม่ของเรา คือ myRectangle มีวิธีการหาพื้นที่อยู่แล้ว เพราะสร้างมาจากแม่แบบที่เรากำหนดไว้ตอนแรก
echo $myRectangle -> area(); // ในที่นี้จะพิมพ์ 250 คือ กว้าง 50 และสูง = 5
เราสามารถสร้างสี่เหลี่ยมและหาพื้นที่ได้อีกหลาย รูป เช่น
$rectangle1 = new Rectangle(10,20);
$rectangle2 = new Rectangle(30,40);
echo $rectangle1 ->area(); // ได้ค่า '200'
echo $rectangle2->perimeter(); // ได้ค่า '140'
เพื่อให้เห็นภาพรวมทั้งหมด จะเปลี่ยนไฟล์เดิมคือ rectangle.php ให้สร้างรูปสี่เหลี่ยมจากแม่แบบ และให้พิมพ์ค่าพื้นที่ พร้อมทั้งเส้นรอบรูป ดังนี้
require('rect.php');
$w = $_POST["width"];
$h = $_POST["height"];
$myRectangle = new Rectangle($w,$h);
?>
ความยาว: width?>
ความสูง: height?>
พื้นที่: area()?>
เส้นรอบรูป: perimeter()?>
จะเห็นว่า OOP ช่วยให้เราสามารถใช้แม่แบบ หรือ CLASS สร้าง วัตถุ (objects) ได้อีกจำนวนมาก โดยใช้โค้ดของเดิม ทำให้ดูง่ายไม่ยุ่งยาก แต่ทั้งหมดนี้เป็นเพียงพื้นฐานเบื้องต้นเท่านั้น แต่เพียงพอที่จะเป็นพื้นฐานในการศึกษาต่อไป
เว็ปเขียนโปรแกรมที่น่าสนใจ
http://www.thaiarticle.com
ไทยอาร์ติเคิล(Thaiarticle) รวบรวมซอร์ดโค้ด ความรู้เกี่ยวกับการเขียนโปรแกรมภาษาต่างๆ อาทิ ASP, ADO, SQL, PHP พร้อมตัวอย่างคำสั่งการใช้งาน รวมถึงให้ความรู้เกี่ยวกับโปรแกรมที่ใช้ในการทำเว็บไซต์ โปแกรมการทำแอพพลิเคชั่นต่างๆ แนะนำความรู้เกี่ยวกับคอมพิวเตอร์และฮาร์ดแวร์ที่น่าสนใจ
http://www.exzilla.net
ด้านอินเทอร์เน็ต Tips และวิธีการพัฒนาเว็บเบส แอปพริเคชั่น (Web-Base Applications) ด้วย Oracle Database, Java Servlet/JSP, ASP, PHP และ XML Technology Tips and Implementation for webBase Applications with Oracle Database,java Servlet/JSP,ASP,PHP and XML technology.
http://www.narisa.com
เชิญ แลกเปลี่ยนทัศนะคติ ความคิดเห็น ในการพัฒนา web-based Application ด้วย servlet / jsp php asp ที่ทำงานกับ Oracle Database Web-based Application development base forum on servlet / jsp php asp and Oracle Database Technology
http://www.exzilla.com
ทิป(Tips) และวิธีการพัฒนา Web-Base Applications ด้วย Oracle Database,Java Servlet/JSP, ASP, PHP และ XML Technology Tips and Implementation for webBase Applications with Oracle Database,java Servlet/JSP,ASP,PHP and XML technology
http://www.twoguru.com
ให้เนื้อหา เรื่อง Microsoft .NET และ การนำเทคโนโลยีมาใช้ ผ่าน ภาษา C# รวมถึง ASP.NET และอื่นๆ ที่เกี่ยวข้อง การเขียนโปรแกรม และการใช้งานโปรแกรมพื้นฐานทั่วๆ ไป The content of this web site is on Microsoft .NET, C#, ASP.NET and other related issues
ถ้าเพื่อนๆมีเว็ปไหนน่าสนใจอีกก้อแนะนำมาได้นะครับ
ไทยอาร์ติเคิล(Thaiarticle) รวบรวมซอร์ดโค้ด ความรู้เกี่ยวกับการเขียนโปรแกรมภาษาต่างๆ อาทิ ASP, ADO, SQL, PHP พร้อมตัวอย่างคำสั่งการใช้งาน รวมถึงให้ความรู้เกี่ยวกับโปรแกรมที่ใช้ในการทำเว็บไซต์ โปแกรมการทำแอพพลิเคชั่นต่างๆ แนะนำความรู้เกี่ยวกับคอมพิวเตอร์และฮาร์ดแวร์ที่น่าสนใจ
http://www.exzilla.net
ด้านอินเทอร์เน็ต Tips และวิธีการพัฒนาเว็บเบส แอปพริเคชั่น (Web-Base Applications) ด้วย Oracle Database, Java Servlet/JSP, ASP, PHP และ XML Technology Tips and Implementation for webBase Applications with Oracle Database,java Servlet/JSP,ASP,PHP and XML technology.
http://www.narisa.com
เชิญ แลกเปลี่ยนทัศนะคติ ความคิดเห็น ในการพัฒนา web-based Application ด้วย servlet / jsp php asp ที่ทำงานกับ Oracle Database Web-based Application development base forum on servlet / jsp php asp and Oracle Database Technology
http://www.exzilla.com
ทิป(Tips) และวิธีการพัฒนา Web-Base Applications ด้วย Oracle Database,Java Servlet/JSP, ASP, PHP และ XML Technology Tips and Implementation for webBase Applications with Oracle Database,java Servlet/JSP,ASP,PHP and XML technology
http://www.twoguru.com
ให้เนื้อหา เรื่อง Microsoft .NET และ การนำเทคโนโลยีมาใช้ ผ่าน ภาษา C# รวมถึง ASP.NET และอื่นๆ ที่เกี่ยวข้อง การเขียนโปรแกรม และการใช้งานโปรแกรมพื้นฐานทั่วๆ ไป The content of this web site is on Microsoft .NET, C#, ASP.NET and other related issues
ถ้าเพื่อนๆมีเว็ปไหนน่าสนใจอีกก้อแนะนำมาได้นะครับ
การแจ้งชื่อเว็บไชต์ของเราไว้ที่ Search Engine
ปัจจุบันมีเว็บไซค์หลายแห่งที่เป็นแหล่งค้นหาข้อมูล บนอินเตอร์เน็ต หรือที่เราเรียกว่า Search Engine ซึ่ง Search Engine เหล่านี้มีบริการให้เจ้าของเว็บไซค์ต่าง ๆ ใส่ชื่อเว็บไซค์ของตัวเองเข้าไปใน ระบบฐานข้อมูลของเขาด้วย ( ส่วนใหญ่บริเวณที่ให้เราใส่ชื่อเว็บไซค์ของเราจะใช้คำว่า Add URL ) โดยจะให้เราใส่ Key Word หรือคำที่แสดงเนื้อหาสั้น ๆ ของเว็บไซค์ของเรา เมื่อมีผู้มาค้นหาข้อมูลและต้องการข้อมูลที่ตรงกับ Key Word ของเราก็จะปรากฏชื่อเว็บไซค์ของเราเพื่อให้คลิกเข้าไปชมเว็บไซต์ ของเราได้ การแจ้งชื่อเว็บไซค์ของเราไว้ที่ Search Engine หลาย ๆ แห่งจึงเป็นเหมือนการประชาสัมพันธ์ ให้นักท่องเว็บคนอื่น ๆ ได้รู้จักเว็บไซค์ของ เรามากขึ้น ถ้าคุณ Add URL ไว้ในเว็บทั้งหมดนี้ รับรองได้ว่าต้องมีคนเข้าชมเว็บของคุณแน่นอน
• Read our article on Google Submission and Ranking as google is the top search engine today!
• Read our tutorial on 10 most effective tips on Search Engine Optimization
• Free Submission Resources .
• Search Engine Submission
• Add URL เว็บไซต์ต่างประเทศ
http://www.sanook.com
http://www.hunsa.com
http://www.365jukebox.com
http://www.kapook.com
http://www.narak.com
http://www.deedeejang.com
http://www.pixiart.com
http://www.saranair.com
http://www.eduzones.com
http://www.thaiyellowpagesusa.com
http://sansarn.com
http://www.kmitl.ac.th
http://www.yoye.com
http://www.webthaithai.com
http://se-ed.net
http://www.siamanimal.com
http://www.samui-tourism.com
http://www.siammarry.com
http://www.thaitennismagazine.com
http://www.ctv.co.th
http://www.bcoms.net
http://www.nationmultimedia.com
http://directory.nakhonsi.com
http://www.thaitopsites.com
http://www.pantip.com
http://www.tem100.com
http://www.friend.co.th
http://www.entrance.co.th
http://www.thaifitway.com
http://www.autodecal.net
http://www.baanjomyut.com
http://www.krabi-tourism.com
http://www.patsadu.com
http://www.hawebthai.com
http://www.nrct.net
http://www.hunsa.com
http://webdir.swu.ac.th
http://www.songkwae.com
http://www.thaispider.net/index.php
http://203.144.216.196
http://www.com-th.net
http://www.yoye.com
http://www.thaiirc.com
http://www.thaihealthnet.com/links/index.php
http://www.jbac.ac.th
http://www.google.com
http://www.formumandme.com
http://add.yahoo.com
http://www.scrubtheweb.com
http://www.exactseek.com
http://www.whatuseek.com
http://www.soraphob.com
http://www.tekkors.com
http://www.naturetaste.com
http://www.soraphob.com
http://www.aeiwi.com
http://www.netsearch.org
http://www.checkhouston.com
http://www.whatuseek.com
http://www.exactseek.com
http://www.findlaw.com
http://www.worldhot.com
http://www.divorcesource.com
http://www.entireweb.com
• Read our article on Google Submission and Ranking as google is the top search engine today!
• Read our tutorial on 10 most effective tips on Search Engine Optimization
• Free Submission Resources .
• Search Engine Submission
• Add URL เว็บไซต์ต่างประเทศ
http://www.sanook.com
http://www.hunsa.com
http://www.365jukebox.com
http://www.kapook.com
http://www.narak.com
http://www.deedeejang.com
http://www.pixiart.com
http://www.saranair.com
http://www.eduzones.com
http://www.thaiyellowpagesusa.com
http://sansarn.com
http://www.kmitl.ac.th
http://www.yoye.com
http://www.webthaithai.com
http://se-ed.net
http://www.siamanimal.com
http://www.samui-tourism.com
http://www.siammarry.com
http://www.thaitennismagazine.com
http://www.ctv.co.th
http://www.bcoms.net
http://www.nationmultimedia.com
http://directory.nakhonsi.com
http://www.thaitopsites.com
http://www.pantip.com
http://www.tem100.com
http://www.friend.co.th
http://www.entrance.co.th
http://www.thaifitway.com
http://www.autodecal.net
http://www.baanjomyut.com
http://www.krabi-tourism.com
http://www.patsadu.com
http://www.hawebthai.com
http://www.nrct.net
http://www.hunsa.com
http://webdir.swu.ac.th
http://www.songkwae.com
http://www.thaispider.net/index.php
http://203.144.216.196
http://www.com-th.net
http://www.yoye.com
http://www.thaiirc.com
http://www.thaihealthnet.com/links/index.php
http://www.jbac.ac.th
http://www.google.com
http://www.formumandme.com
http://add.yahoo.com
http://www.scrubtheweb.com
http://www.exactseek.com
http://www.whatuseek.com
http://www.soraphob.com
http://www.tekkors.com
http://www.naturetaste.com
http://www.soraphob.com
http://www.aeiwi.com
http://www.netsearch.org
http://www.checkhouston.com
http://www.whatuseek.com
http://www.exactseek.com
http://www.findlaw.com
http://www.worldhot.com
http://www.divorcesource.com
http://www.entireweb.com
โปรโมท เว็ปไซต์
สำหรับบางท่านที่เบื่อที่จะต้องแจ้งชื่อเว็บไซค์ของท่านไปใน หลาย ๆ Search Engine เนื่องจากทำให้เสียเวลา และต้องพิมพ์ข้อความซ้ำ ๆ กันหลาย ๆ รอบ แต่ก็มีเว็บไซค์ที่ให้บริการ Add URL ให้ท่านใน Search Engine ต่าง ๆ โดยที่ท่านไม่ต้องทำเอง ซึ่งมีดังต่อไปนี้
Submit เพิ่มชื่อเว็บคุณลงไปยัง 40 Search Engine
AddMe เพิ่มชื่อเว็บคุณลงไปยัง 32 Search Engine
Link Submit เพิ่มชื่อเว็บคุณลงไปยัง 24 Search Engine ใช้งานง่าย
Easy Submit เพิ่มชื่อเว็บคุณ ลง Search Engine ต่าง ๆ
Wump Submit เพิ่มชื่อเว็บคุณลงไปยัง 19 Search Engine ของยุโรป
Bluker เพิ่มชื่อเว็บคุณ ลง Search Engine ต่างๆ
Egnet เพิ่มชื่อเว็บคุณ ลง Search Engine ต่างๆ
Submit Service เพิ่มชื่อเว็บคุณลงไปยัง 150 Search Engine ใช้งานง่าย
Add Pro เพิ่มชื่อเว็บคุณลงไปยัง Search Engine ของ Australia, Canada
Submit Shop เพิ่มชื่อเว็บคุณ ลง 30 Search Engine
Submit เพิ่มชื่อเว็บคุณลงไปยัง 40 Search Engine
AddMe เพิ่มชื่อเว็บคุณลงไปยัง 32 Search Engine
Link Submit เพิ่มชื่อเว็บคุณลงไปยัง 24 Search Engine ใช้งานง่าย
Easy Submit เพิ่มชื่อเว็บคุณ ลง Search Engine ต่าง ๆ
Wump Submit เพิ่มชื่อเว็บคุณลงไปยัง 19 Search Engine ของยุโรป
Bluker เพิ่มชื่อเว็บคุณ ลง Search Engine ต่างๆ
Egnet เพิ่มชื่อเว็บคุณ ลง Search Engine ต่างๆ
Submit Service เพิ่มชื่อเว็บคุณลงไปยัง 150 Search Engine ใช้งานง่าย
Add Pro เพิ่มชื่อเว็บคุณลงไปยัง Search Engine ของ Australia, Canada
Submit Shop เพิ่มชื่อเว็บคุณ ลง 30 Search Engine
partially coding
ปกติแล้วเวลาเราเขียน method อะไรขึ้นมาเราก็มักจะสร้างมันจาก class diagram ที่มีคนออกแบบมาให้ หรือหากเราทำการ design class เอง แล้วก็สร้าง method ที่จำเป็นไว้ เราก็มักจะเขียนแค่ implementation ไว้ก่อน ถ้าเป็น non-void method เราก็มักจะเขียนประโยค return พร้อมค่าส่งกลับอะไรซักค่า เช่น 0 หรือ null เพื่อให้มันแค่ compile ผ่าน
public int Generate() {
return 0;
}
หรือ
public Shape Inflate(int dw) {
return null;
}
แต่ว่าถ้าเราเขียน method เยอะ ๆ แล้วลืมทำให้เสร็จ แล้วถ้ายิ่งเรายุบ(folding) นั้นไว้ด้วย พอเรา coding ไปซักพักจนเกือบเสร็จ เราก็มักจะเทสต์โปรแกรมของเรา แล้วถ้ามันเกิดผ่านขึ้นมา ก็จะปล่อยมันไปจนลืมว่าเรายัง implement ไม่ครบ
จริง ๆ แล้วเรามักจะไม่ลืมอะไรติงต๊องขนาดนั้นหรอกครับ แต่ถ้าเป็นแบบว่ามี condition เยอะ ๆ แล้วแบบว่าเขียนไป if นึงแล้วเว้นอีก if นึงเอาไว้ ดูเผิน ๆ ก็คงคิดว่าเสร็จแล้ว ประมาณว่า
public int Generate() {
int ret = 0;
if(isFull) {
/**********************
* 100+ lines of code *
**********************/
ret = (dim + last) / cnt;
} else {
// not implemented
}
return ret;
}
ถ้ารันแล้วเจอ bug กว่าจะ debug อันนี้เจอก็คงนานอยู่ ในหนังสือ The pratice of programming ของ Kernighan & Pike แนะนำว่าควรตั้งค่าตัวแปร int เป็นเลขฐาน 16 ตัวนึงคือ 0XDEADBEEF รับรองว่าตอน debug ไม่เห็นก็ให้มันรู้ไป
แต่สำหรับ .NET แล้วเรามีวิธีนึงที่ดีกว่านี้ครับ คือการเขวี้ยง ( throw) exception ตัวนึง ซึ่งมีไว้เฉพาะสำหรับการนี้เลย นั่นคือ
System.NotImplementedException
วิธีใช้ก็ง่ายครับ ก็สั่ง throw มันออกไปเลยดังนี้ครับ
public int Generate() {
int ret = 0XDEADBEEF;
if(isEditable) {
/**********************
* 100+ lines of code *
**********************/
ret = (dim + last) / cnt;
} else {
// not implemented
throw new NotImplementedException();
}
return ret;
}
แต่ถ้าจะให้ดีระบุสาเหตุลงไปด้วยก็ดีครับ เวลาดูด้วย debugger จะได้สื่อความหมายดังนี้
public Shape Inflate(int dw) {
throw new NotImplementedException("Method 'Shape Inflate()' have not complete");
return null;
}
อ้อ วิธีนี้จะใช้ได้ผลสำหรับพวกที่ไม่ได้ดัก exception แบบครอบจักรวาล แบบหนังสือไทยหลาย ๆ เล่มใช้กัน ดัง code ด้านล่างนี้นะครับ
จำไว้ว่าอย่าใช้นะครับ ไม่งั้นจะไม่แก้ปัญหาอะไรเลย เพราะ exception มีไว้เพื่อฟ้อง error ที่เกิดขึ้น
Shape s = new Shape(ShapeStyle.Oval, 5); //...
try {
s = s.Inflate(s.Size / 2);
//...
catch(Exception) {
// don't do anything
}
ไหน ๆ ก็กล่าวถึง exception กล้ว ถ้าไม่พลาด ตอนหน้าจะมาพูดถึงวิธีใช้งาน exception และวิธีการดัก exception เพื่อตรวจสอบปัญหาใน code ที่เขียนกัน
public int Generate() {
return 0;
}
หรือ
public Shape Inflate(int dw) {
return null;
}
แต่ว่าถ้าเราเขียน method เยอะ ๆ แล้วลืมทำให้เสร็จ แล้วถ้ายิ่งเรายุบ(folding) นั้นไว้ด้วย พอเรา coding ไปซักพักจนเกือบเสร็จ เราก็มักจะเทสต์โปรแกรมของเรา แล้วถ้ามันเกิดผ่านขึ้นมา ก็จะปล่อยมันไปจนลืมว่าเรายัง implement ไม่ครบ
จริง ๆ แล้วเรามักจะไม่ลืมอะไรติงต๊องขนาดนั้นหรอกครับ แต่ถ้าเป็นแบบว่ามี condition เยอะ ๆ แล้วแบบว่าเขียนไป if นึงแล้วเว้นอีก if นึงเอาไว้ ดูเผิน ๆ ก็คงคิดว่าเสร็จแล้ว ประมาณว่า
public int Generate() {
int ret = 0;
if(isFull) {
/**********************
* 100+ lines of code *
**********************/
ret = (dim + last) / cnt;
} else {
// not implemented
}
return ret;
}
ถ้ารันแล้วเจอ bug กว่าจะ debug อันนี้เจอก็คงนานอยู่ ในหนังสือ The pratice of programming ของ Kernighan & Pike แนะนำว่าควรตั้งค่าตัวแปร int เป็นเลขฐาน 16 ตัวนึงคือ 0XDEADBEEF รับรองว่าตอน debug ไม่เห็นก็ให้มันรู้ไป
แต่สำหรับ .NET แล้วเรามีวิธีนึงที่ดีกว่านี้ครับ คือการเขวี้ยง ( throw) exception ตัวนึง ซึ่งมีไว้เฉพาะสำหรับการนี้เลย นั่นคือ
System.NotImplementedException
วิธีใช้ก็ง่ายครับ ก็สั่ง throw มันออกไปเลยดังนี้ครับ
public int Generate() {
int ret = 0XDEADBEEF;
if(isEditable) {
/**********************
* 100+ lines of code *
**********************/
ret = (dim + last) / cnt;
} else {
// not implemented
throw new NotImplementedException();
}
return ret;
}
แต่ถ้าจะให้ดีระบุสาเหตุลงไปด้วยก็ดีครับ เวลาดูด้วย debugger จะได้สื่อความหมายดังนี้
public Shape Inflate(int dw) {
throw new NotImplementedException("Method 'Shape Inflate()' have not complete");
return null;
}
อ้อ วิธีนี้จะใช้ได้ผลสำหรับพวกที่ไม่ได้ดัก exception แบบครอบจักรวาล แบบหนังสือไทยหลาย ๆ เล่มใช้กัน ดัง code ด้านล่างนี้นะครับ
จำไว้ว่าอย่าใช้นะครับ ไม่งั้นจะไม่แก้ปัญหาอะไรเลย เพราะ exception มีไว้เพื่อฟ้อง error ที่เกิดขึ้น
Shape s = new Shape(ShapeStyle.Oval, 5); //...
try {
s = s.Inflate(s.Size / 2);
//...
catch(Exception) {
// don't do anything
}
ไหน ๆ ก็กล่าวถึง exception กล้ว ถ้าไม่พลาด ตอนหน้าจะมาพูดถึงวิธีใช้งาน exception และวิธีการดัก exception เพื่อตรวจสอบปัญหาใน code ที่เขียนกัน
Method with Variable-length Argument Lists
Variable-length Argument Lists(C#)
ลองมาดู method ที่ใช้กันจนคุ้นเคย อย่าง WriteLine
Console.WriteLine("center is ({0},{1})", x, y);
หากลองสังเกตดู จะสังเกตได้ว่า method นี้มี parameter หลายตัว(ดูได้จากจำนวน comma(',') และก็มีขนาดไม่แน่นอนด้วย
โดยทั่วไปแล้วการ define method นั้นจะต้องกำหนด parameter ให้แน่นอน ทั้งชนิดและจำนวน
หรือถ้าเราจะสร้าง method WriteLine ให้รับ parameter เป็น array
public static void WriteLine(string format, object[] arg) {
//...
}
การใช้งานก็คงลำบากใช่เล่น เวลาจะส่ง parameter ไปแต่ละครั้งก็ต้องมาสร้าง array ใหม่ทุก ๆ ครั้ง ส่งไปให้
Console.WriteLine("center is ({0},{1})", new object[]{x, y});
จริง ๆ ข้างบนสามารถเขียนเป็น Console.WriteLine("center is ({0},{1})", {x, y}); ก็ได้นะครับ (ใน .NET การ initialize new array ไม่จำเป็นต้องใส่ new[] ไว้ข้างหน้าก็ได้ครับ)
มันก็คงดูลำบากใช่เล่นนะครับ กับการใช้ method ตัวนึง แล้วต้องมาส่ง array ให้เนี่ย คงไม่สวยงามนักหรอก ดังนั้นใน .NET จึงมีความสามารถในการ define method ให้สามารถรับ parameter โดยไม่จำกัดได้ โดยการเติม keyword params ไว้หน้า type ของ parameter ตัวนั้น
แล้วการใช้งานก็สามารถใช้ได้ ทั้งแบบการส่ง array เข้าไปแบบตัวอย่างข้างบน หรือจะใช้เป็น การส่ง argument ไปทีละตัวแบบการใช้งานปกติก็ได้
โดยการใช้งาน parameter เหล่านั้น ก็ทำได้โดยการ access array แบบปกติ
public static void WriteLine(string format, params object[] args) {
for(int i = 0; i < args.Length; i++) {
//...
}
}
แถมให้อีกหน่อยละกัน ใน java(5.0) และ C ก็สามารถใช้งานได้นะครับ เอาทีละภาษาละกัน
Variable-length Argument Lists(C language)
ในภาษา C นั้น การ declare function ทำได้โดยการ include header file stdarg.h และเขียน ... ไว้เป็น parameter ตัวหลังสุด
#include
int printf(char *fmt, ...);
แต่ว่าการใช้งานนั้นไม่ได้ง่ายอย่างที่คิด โดยจะต้องนำ parameter ทั้งหมดใส่ไปใน object ที่มี type เป็น va_list โดยการส่ง parameter ตัวสุดท้ายก่อน variable argument list ไปให้กับ macro va_start โดยการใช้งาน ทำได้โดยเรียก macro va_arg ซี่งจะให้ค่า มาเป็น type ที่เราระบุลงไป และเมื่อใช้งานเสร็จแล้ว ต้องเคลียร์ทิ้งด้วย macro va_end
#include
int printf(char *fmt, ...) {
va_list ap;
int ival;
double dval;
char c, *p, *sval;
va_start(ap, fmt);
for(p = fmt; *p; p++) {
if(*p != '%') {
putchar(*p);
continue;
}
switch(*++p) {
case 'd' :
ival = va_arg(ap, int);
//...
break;
case 'f' :
dval = va_arg(ap, double);
//...
break;
case 's' :
ival = va_arg(ap, char *);
//...
break;
case 'c' :
ival = (char)va_arg(ap, int);
//...
break;
//...
default :
//...
break;
}
}
va_end(ap);
}
Variable-length Argument Lists(Java 5.0)
java นั้นถือว่าเป็นภาษาหลังสุดที่รองรับ feature นี้ (ออกมาใน version 1.5 หรือ Java 5.0 ซึ่งถือว่าหลังจาก .NET ออกได้หลายปีพอควร) โดยมีชื่อเรียกว่า varargs(JSR 201)ซึ่งก็ทำให้ใน Java 5.0 นั้นมี method printf ให้ใช้งาน
โดยการใช้งาน feature นี้ง่ายดายดังเช่นใน .NET แต่ว่ามี syntax คล้าย ๆ กับ C
public PrintStream printf(Locale l, String format, Object... args) {
for(int i = 0; i < args.length(); i++) {
//...
}
}
แถมหน่อยละกัน สำหรับ printf ใน Java นั้น ยังมี %n ซึ่งเป็นการขึ้นบรรทัดใหม่ (การใช้ \n ทำให้ไม่ portable เนื่องจาก อักขระขึ้นบรรทัดใหม่ของ windows เป็น \r\n : carriage return ตามด้วย new line ซึ่งสลับกับเครื่องพิมพ์ดีด, ใน unix เป็น \n ตัวเดียว ที่สำคัญคือใน Mac กลับใช้ \r อย่างเดียว ซึ่งการใช้ printf("\n"); จะไม่สามารถ ขึ้นบรรทัดใหม่ได้)
สรุป
การสร้าง method ที่รองรับ variable-length argument list นั้น สร้างความสะดวกในการใช้ method นั้น แต่ไม่บ่อยครั้งนักที่เราจะได้ใช้ parameter หลายตัวนัก ดังนั้นการใช้งาน method แบบนี้อาจจะกินแรงไปบ้าง(เพราะต้องวนลูป เพื่อ access array) เราสามารถใช้การ overload method ซึ่ง specified parameter ไว้แน่นอน ดังเช่นตัวอย่างการ implement WriteLine ใน .NET ซึ่งมี overload ไว้ถึง 19 แบบ
ลองมาดู method ที่ใช้กันจนคุ้นเคย อย่าง WriteLine
Console.WriteLine("center is ({0},{1})", x, y);
หากลองสังเกตดู จะสังเกตได้ว่า method นี้มี parameter หลายตัว(ดูได้จากจำนวน comma(',') และก็มีขนาดไม่แน่นอนด้วย
โดยทั่วไปแล้วการ define method นั้นจะต้องกำหนด parameter ให้แน่นอน ทั้งชนิดและจำนวน
หรือถ้าเราจะสร้าง method WriteLine ให้รับ parameter เป็น array
public static void WriteLine(string format, object[] arg) {
//...
}
การใช้งานก็คงลำบากใช่เล่น เวลาจะส่ง parameter ไปแต่ละครั้งก็ต้องมาสร้าง array ใหม่ทุก ๆ ครั้ง ส่งไปให้
Console.WriteLine("center is ({0},{1})", new object[]{x, y});
จริง ๆ ข้างบนสามารถเขียนเป็น Console.WriteLine("center is ({0},{1})", {x, y}); ก็ได้นะครับ (ใน .NET การ initialize new array ไม่จำเป็นต้องใส่ new
มันก็คงดูลำบากใช่เล่นนะครับ กับการใช้ method ตัวนึง แล้วต้องมาส่ง array ให้เนี่ย คงไม่สวยงามนักหรอก ดังนั้นใน .NET จึงมีความสามารถในการ define method ให้สามารถรับ parameter โดยไม่จำกัดได้ โดยการเติม keyword params ไว้หน้า type ของ parameter ตัวนั้น
แล้วการใช้งานก็สามารถใช้ได้ ทั้งแบบการส่ง array เข้าไปแบบตัวอย่างข้างบน หรือจะใช้เป็น การส่ง argument ไปทีละตัวแบบการใช้งานปกติก็ได้
โดยการใช้งาน parameter เหล่านั้น ก็ทำได้โดยการ access array แบบปกติ
public static void WriteLine(string format, params object[] args) {
for(int i = 0; i < args.Length; i++) {
//...
}
}
แถมให้อีกหน่อยละกัน ใน java(5.0) และ C ก็สามารถใช้งานได้นะครับ เอาทีละภาษาละกัน
Variable-length Argument Lists(C language)
ในภาษา C นั้น การ declare function ทำได้โดยการ include header file stdarg.h และเขียน ... ไว้เป็น parameter ตัวหลังสุด
#include
int printf(char *fmt, ...);
แต่ว่าการใช้งานนั้นไม่ได้ง่ายอย่างที่คิด โดยจะต้องนำ parameter ทั้งหมดใส่ไปใน object ที่มี type เป็น va_list โดยการส่ง parameter ตัวสุดท้ายก่อน variable argument list ไปให้กับ macro va_start โดยการใช้งาน ทำได้โดยเรียก macro va_arg ซี่งจะให้ค่า มาเป็น type ที่เราระบุลงไป และเมื่อใช้งานเสร็จแล้ว ต้องเคลียร์ทิ้งด้วย macro va_end
#include
int printf(char *fmt, ...) {
va_list ap;
int ival;
double dval;
char c, *p, *sval;
va_start(ap, fmt);
for(p = fmt; *p; p++) {
if(*p != '%') {
putchar(*p);
continue;
}
switch(*++p) {
case 'd' :
ival = va_arg(ap, int);
//...
break;
case 'f' :
dval = va_arg(ap, double);
//...
break;
case 's' :
ival = va_arg(ap, char *);
//...
break;
case 'c' :
ival = (char)va_arg(ap, int);
//...
break;
//...
default :
//...
break;
}
}
va_end(ap);
}
Variable-length Argument Lists(Java 5.0)
java นั้นถือว่าเป็นภาษาหลังสุดที่รองรับ feature นี้ (ออกมาใน version 1.5 หรือ Java 5.0 ซึ่งถือว่าหลังจาก .NET ออกได้หลายปีพอควร) โดยมีชื่อเรียกว่า varargs(JSR 201)ซึ่งก็ทำให้ใน Java 5.0 นั้นมี method printf ให้ใช้งาน
โดยการใช้งาน feature นี้ง่ายดายดังเช่นใน .NET แต่ว่ามี syntax คล้าย ๆ กับ C
public PrintStream printf(Locale l, String format, Object... args) {
for(int i = 0; i < args.length(); i++) {
//...
}
}
แถมหน่อยละกัน สำหรับ printf ใน Java นั้น ยังมี %n ซึ่งเป็นการขึ้นบรรทัดใหม่ (การใช้ \n ทำให้ไม่ portable เนื่องจาก อักขระขึ้นบรรทัดใหม่ของ windows เป็น \r\n : carriage return ตามด้วย new line ซึ่งสลับกับเครื่องพิมพ์ดีด, ใน unix เป็น \n ตัวเดียว ที่สำคัญคือใน Mac กลับใช้ \r อย่างเดียว ซึ่งการใช้ printf("\n"); จะไม่สามารถ ขึ้นบรรทัดใหม่ได้)
สรุป
การสร้าง method ที่รองรับ variable-length argument list นั้น สร้างความสะดวกในการใช้ method นั้น แต่ไม่บ่อยครั้งนักที่เราจะได้ใช้ parameter หลายตัวนัก ดังนั้นการใช้งาน method แบบนี้อาจจะกินแรงไปบ้าง(เพราะต้องวนลูป เพื่อ access array) เราสามารถใช้การ overload method ซึ่ง specified parameter ไว้แน่นอน ดังเช่นตัวอย่างการ implement WriteLine ใน .NET ซึ่งมี overload ไว้ถึง 19 แบบ
C# 3.0 new feature
.NET 2.0 ก็ออกมาอย่างเป็นทางการแล้ว รวมทั้ง IDE อย่าง vs 2005 ก็ออกมาให้ดาวน์โหลดกันฟรี(express edition) แล้ว แต่ท่านรู้หรือไม่ spec ของ C# 3.0 ก็ออกมาก่อนหน้านี้แล้วเหมือนกัน หลาย ๆ เว็บก็มี (p)review กันแล้วล่ะ
เอาของเก่ามาเล่าใหม่อีกครั้ง จะเป็นไรไป
Implicitly typed local variables
เป็นการประกาศตัวแปรใหม่ แบบไม่ต้องกำหนด data type โดยการดูจาก type ของ initialized value โดยประกาศได้โดยใช้ keyword var คุ้น ๆ มั้ยครับ กับ keyword นี้ ก็แหม คุณ Anders Heljsberg เป็นคนออกแบบนี่นา อะไร อะไรมันก็ต้องเอา Delphi มาใช้กันหน่อย เอ๊ะ หรือว่ามันจะมาจากคำว่า variant ใน VB หว่า (ไม่ใช่หรอก var ย่อจาก variable เป็น keyword จาก Delphi น่ะแหละ)
ตัวอย่างก็ขอเอามาจากใน specification doc เลยละกัน
var i = 5;
var s = "Hello";
var d = 1.0;
var numbers = new int[] {1, 2, 3};
ซืึ่งจะมีความหมายเดียวกับ
int i = 5;
string s = "Hello";
double d = 1.0;
int[] numbers = new int[] {1, 2, 3};
โดยข้อกำหนดของการประกาศ type แบบ implicit มีอยู่ว่า
การ declare ตัวแปรจะต้องกำหนดค่าให้ทันที
ค่าที่กำหนดจะต้องเป็น expression
ไม่สามารถกำหนดค่า null ให้ได้(ก็แหงล่ะ ไม่งั้นจะระบุ type ยังไงล่ะ)
ดังนั้นการประกาศตัวแปรข้างล่างเหล่านี้จะไม่สามารถผ่านการคอมไพล์ไปได้
var x;
var y = {1, 2, 3};
var z = null;
LINQ(Language Integrated Query)
ตามชื่อแล้ว linq เป็น query ที่ติดตัวมากับภาษาเลยโดยใช้ดึงข้อมูลออกมาจาก collection ใด ๆ ก็ได้ และถ้า MS ออกแบบ query มาใหม่ ก็คงจะไม่ทำให้ syntax มันใช้งานยากหรอกครับ linq นั้นมีรูปแบบที่ใกล้เคียงกับ SQL มาก ๆ keyword นั้นก็คล้ายคลึงกับ SQL มากนัก ทั้ง "SELECT", "FROM", "WHERE", "GROUPBY", "ORDERBY", "DISTINCT"
ส่วนตัวอย่างขอดัดแปลงจากบล็อกของคุณ pok ละกันครับ เค้าเขียนไว้ดีแล้ว
string[] aBunchOfWords = {"One","Two", "Hello",
"World", "Four", "Five"};
var result = from s in aBunchOfWords
where s.Length == 5
select s;
foreach(var str in result) {
Console.WriteLine(str);
}
มีตัวอย่างอีกเยอะแยะใน 101 LINQ Samples จาก msdn/vc#/future
จริง ๆ แล้วยังเหลือ feature เจ๋ง ๆอีกอย่างเช่น "Extension methods", "Lambda expressions", "Object and collection initializers", "Anonymous types", "Implicitly typed arrays", "Expression trees" โดยเฉพาะ Lambda expressions นั้นถ้านำมาใช้ร่วมกับ anonymous method ใน C# 2.0 นั้นจะได้ code ที่กระชับลงอย่างมากเลยครับ ไว้มีเวลาจะมาเขียนให้อ่านกันเพลิน ๆ
เอาของเก่ามาเล่าใหม่อีกครั้ง จะเป็นไรไป
Implicitly typed local variables
เป็นการประกาศตัวแปรใหม่ แบบไม่ต้องกำหนด data type โดยการดูจาก type ของ initialized value โดยประกาศได้โดยใช้ keyword var คุ้น ๆ มั้ยครับ กับ keyword นี้ ก็แหม คุณ Anders Heljsberg เป็นคนออกแบบนี่นา อะไร อะไรมันก็ต้องเอา Delphi มาใช้กันหน่อย เอ๊ะ หรือว่ามันจะมาจากคำว่า variant ใน VB หว่า (ไม่ใช่หรอก var ย่อจาก variable เป็น keyword จาก Delphi น่ะแหละ)
ตัวอย่างก็ขอเอามาจากใน specification doc เลยละกัน
var i = 5;
var s = "Hello";
var d = 1.0;
var numbers = new int[] {1, 2, 3};
ซืึ่งจะมีความหมายเดียวกับ
int i = 5;
string s = "Hello";
double d = 1.0;
int[] numbers = new int[] {1, 2, 3};
โดยข้อกำหนดของการประกาศ type แบบ implicit มีอยู่ว่า
การ declare ตัวแปรจะต้องกำหนดค่าให้ทันที
ค่าที่กำหนดจะต้องเป็น expression
ไม่สามารถกำหนดค่า null ให้ได้(ก็แหงล่ะ ไม่งั้นจะระบุ type ยังไงล่ะ)
ดังนั้นการประกาศตัวแปรข้างล่างเหล่านี้จะไม่สามารถผ่านการคอมไพล์ไปได้
var x;
var y = {1, 2, 3};
var z = null;
LINQ(Language Integrated Query)
ตามชื่อแล้ว linq เป็น query ที่ติดตัวมากับภาษาเลยโดยใช้ดึงข้อมูลออกมาจาก collection ใด ๆ ก็ได้ และถ้า MS ออกแบบ query มาใหม่ ก็คงจะไม่ทำให้ syntax มันใช้งานยากหรอกครับ linq นั้นมีรูปแบบที่ใกล้เคียงกับ SQL มาก ๆ keyword นั้นก็คล้ายคลึงกับ SQL มากนัก ทั้ง "SELECT", "FROM", "WHERE", "GROUPBY", "ORDERBY", "DISTINCT"
ส่วนตัวอย่างขอดัดแปลงจากบล็อกของคุณ pok ละกันครับ เค้าเขียนไว้ดีแล้ว
string[] aBunchOfWords = {"One","Two", "Hello",
"World", "Four", "Five"};
var result = from s in aBunchOfWords
where s.Length == 5
select s;
foreach(var str in result) {
Console.WriteLine(str);
}
มีตัวอย่างอีกเยอะแยะใน 101 LINQ Samples จาก msdn/vc#/future
จริง ๆ แล้วยังเหลือ feature เจ๋ง ๆอีกอย่างเช่น "Extension methods", "Lambda expressions", "Object and collection initializers", "Anonymous types", "Implicitly typed arrays", "Expression trees" โดยเฉพาะ Lambda expressions นั้นถ้านำมาใช้ร่วมกับ anonymous method ใน C# 2.0 นั้นจะได้ code ที่กระชับลงอย่างมากเลยครับ ไว้มีเวลาจะมาเขียนให้อ่านกันเพลิน ๆ
String Comparison
การเปรียบเทียบตัวแปร string ในหลาย ๆ ภาษานั้นไม่สามารถใช้เครื่องหมายเดียวกับการเปรียบเทียบตัวเลขได้(เท่าที่เห็นนี่ก็มี C# ที่ใช้ == ในการเปรียบเทียบการเท่ากันได้
แต่การเปรียบเทียบการมาก่อนมาหลัง ไม่สามารถใช้เครื่องหมาย >, < ได้ โดยจะต้องใช้ function มาช่วย
C : int strcmp(char *, char *);
ในภาษา C นั้นจะใช้ function strcmp ซึ่งต้อง include string.h เข้ามาด้วย
หากใครเคยเขียน assembly มาจะเคยเห็นคำสั่ง cmp ซึ่งเป็นการ compare ค่าสองค่า โดยการนำมาลบกัน strcmp ก็คล้ายคลึงกัน นั่นคือการนำเอา string ตัวหน้ามาลบตัวหลัง โดยวิธีการลบกันก็คือนำตัวอักษรตัวแรกของทั่งคู่มาเปรียบเทียบกันก่อน(ตาม ASCII code - lexicographical compare) หากยังเท่ากันจะเปรียบเทียบตัวถัดไป โดยผลลัพธ์เป็นดังนี้ หาก string ตัวแรกมาก่อน function นี้จะ return ค่า -1 แต่ถ้ามาทีหลังจะ return +1 ถ้าเป็น string ตัวเดียวกันจะ return 0
char *s, *t;
int result;
//...
result = strcmp(s, t);
if(result < 0) {
// s precede t
} else if(result > 0) {
// t precede s
} else {
//s is equal t
}
สังเกตนะครับ ผมจะเทียบผลลัพธ์ว่ามากกว่าหรือน้อยกว่า 0
ลองมาดูวิธีการจำอย่างง่าย ๆ ของผมนะครับ ถ้า a > b ก็จะหมายความว่า a - b > 0 (ย้ายข้างธรรมดา คงนึกออกนะครับ) นั่นก็หมายความว่า ถ้า strcmp ได้ผลลัพธ์มากกว่า 0 ก็แสดงว่า string ตัวแรกมีค่ามากกว่าตัวหลัง
แล้วความหมายของการมากกว่าของ string คืออะไรล่ะ ให้ลองคิดถึง dictionary นะครับ คำในนั้นจะเรียงตามลำดับตัวอักษรอยู่แล้ว ถ้าเรากำหนดค่าให้คำเหล่านั้นตามลำดับเป็นเลข 1, 2, 3 ไปเรื่อย ๆ คำที่มาทีหลังก็จะมีค่ามากกว่าคำก่อนนั้นใช้มั้ยครับ ดังนั้น strcmp ก็เหมือนกับการเอาลำดับที่ของคำเหล่านั้นมาลบกัน
แล้วมาดูภาษาอื่นกันบ้างนะครับ
Java : public int compareTo(String);
ผลลัพธ์ของ method นี้ก็คล้าย ๆ กับ strcmp ใน C นะครับ เพียงแต่ว่าค่าที่ return กลับมาเป็นผลต่างของตัวอักษรตัวแรกที่ต่างกัน แต่ถ้าเปรียบเทียบกันจนมี string ตัวหนึงหมดก่อน ผลลัพธ์ที่ได้คือผลต่างความยาวของ string คู่นั้น
ดูตัวอย่างละกันครับ
String s, t;
s = "abc";
t = "abz";
System.out.println(s.compareTo(t)); // - 23
หรือ
System.out.println("a".compareTo("A")); // 32
System.out.println("abcdef".compareTo("ab")); // 4
C# : public int CompareTo(string); และ public static int Compare(string, string);
method เจ้าปัญหาของภาษานี้เลยละครับ วิธีการใช้งานของ method แรกนั้นก็เหมือนกับ Java เลยครับ เพียงแต่ว่าผลลัพธ์นั้นจะเป็นเหมือน strcmp ของ C ครับ คือผลลัพธืมีแค่ {-1, 0, 1}
string s = "abc";
string t = "abz";
Console.WriteLine(s.CompareTo(t)); // -1
Console.WriteLine(string.Compare(s, t); // -1
แต่ปัญหามันอยู่ที่ว่ามันดันเรียงเอาตัวอักษรตัวเล็กมาก่อนตัวอักษรตัวใหญ่(ซึ่ง ASCII code ของตัวใหญ่จะมาก่อนตัวเล็ก)
Console.WriteLine("A".CompareTo("a"));
Console.WriteLine(string.Compare("A", "a"));
ทั้งคู่ให้ผลลัพธ์เป็น + ทั้งคู่ครับ นั่นก็หมายความว่า A มาหลัง a (ซึ่งตรงข้ามกับ ASCII)
ยังไม่หมดแค่นั้นครับ ปัญหาแรกยังพอยอมรับได้ แต่อันต่อจากนี้ผมมึนครับ
Console.WriteLine(string.Compare("+", "-"));
Console.WriteLine(string.Compare("+789", "-789"));
อันล่าง return -1 แต่อันบนดัน return +1 ซึ่งมันควรจะได้ -1 เหมือนกันเพราะ '+'(ASCII code 43) มาก่อน '-'(ASCII code 45)
ผมก็ไม่รู้สาเหตุนะครับ เอาเป็นว่าอย่าใช้สอง method นี้ละกันครับ
แล้วก็จะมีคำถามตามมาว่าแล้วจะเปรียบเทียบ string ยังไงล่ะ ?
จริง ๆ แล้วยังเหลือ method อีกตัวนึงครับ นั่นก็คือ
public static int CompareOrdinal(string, string);
อันนี้จะให้ผลที่ถูกต้องแล้วนะครับ โดยผลที่ได้นั้นก็เหมือนกับ compareTo ของ Java
Console.WriteLine(string.CompareOrdinal("+", "-"));
Console.WriteLine(string.CompareOrdinal("+789", "-789"));
โดยทั้งคู่จะ return -2 เหมือนกันแบบเดียวกับ Java ดังนั้นเวลาใช้งานนี่ก็ลืม 2 method แรกไปได้เลย มาใช้แต่ static CompareOrdinal นะครับ
แต่การเปรียบเทียบการมาก่อนมาหลัง ไม่สามารถใช้เครื่องหมาย >, < ได้ โดยจะต้องใช้ function มาช่วย
C : int strcmp(char *, char *);
ในภาษา C นั้นจะใช้ function strcmp ซึ่งต้อง include string.h เข้ามาด้วย
หากใครเคยเขียน assembly มาจะเคยเห็นคำสั่ง cmp ซึ่งเป็นการ compare ค่าสองค่า โดยการนำมาลบกัน strcmp ก็คล้ายคลึงกัน นั่นคือการนำเอา string ตัวหน้ามาลบตัวหลัง โดยวิธีการลบกันก็คือนำตัวอักษรตัวแรกของทั่งคู่มาเปรียบเทียบกันก่อน(ตาม ASCII code - lexicographical compare) หากยังเท่ากันจะเปรียบเทียบตัวถัดไป โดยผลลัพธ์เป็นดังนี้ หาก string ตัวแรกมาก่อน function นี้จะ return ค่า -1 แต่ถ้ามาทีหลังจะ return +1 ถ้าเป็น string ตัวเดียวกันจะ return 0
char *s, *t;
int result;
//...
result = strcmp(s, t);
if(result < 0) {
// s precede t
} else if(result > 0) {
// t precede s
} else {
//s is equal t
}
สังเกตนะครับ ผมจะเทียบผลลัพธ์ว่ามากกว่าหรือน้อยกว่า 0
ลองมาดูวิธีการจำอย่างง่าย ๆ ของผมนะครับ ถ้า a > b ก็จะหมายความว่า a - b > 0 (ย้ายข้างธรรมดา คงนึกออกนะครับ) นั่นก็หมายความว่า ถ้า strcmp ได้ผลลัพธ์มากกว่า 0 ก็แสดงว่า string ตัวแรกมีค่ามากกว่าตัวหลัง
แล้วความหมายของการมากกว่าของ string คืออะไรล่ะ ให้ลองคิดถึง dictionary นะครับ คำในนั้นจะเรียงตามลำดับตัวอักษรอยู่แล้ว ถ้าเรากำหนดค่าให้คำเหล่านั้นตามลำดับเป็นเลข 1, 2, 3 ไปเรื่อย ๆ คำที่มาทีหลังก็จะมีค่ามากกว่าคำก่อนนั้นใช้มั้ยครับ ดังนั้น strcmp ก็เหมือนกับการเอาลำดับที่ของคำเหล่านั้นมาลบกัน
แล้วมาดูภาษาอื่นกันบ้างนะครับ
Java : public int compareTo(String);
ผลลัพธ์ของ method นี้ก็คล้าย ๆ กับ strcmp ใน C นะครับ เพียงแต่ว่าค่าที่ return กลับมาเป็นผลต่างของตัวอักษรตัวแรกที่ต่างกัน แต่ถ้าเปรียบเทียบกันจนมี string ตัวหนึงหมดก่อน ผลลัพธ์ที่ได้คือผลต่างความยาวของ string คู่นั้น
ดูตัวอย่างละกันครับ
String s, t;
s = "abc";
t = "abz";
System.out.println(s.compareTo(t)); // - 23
หรือ
System.out.println("a".compareTo("A")); // 32
System.out.println("abcdef".compareTo("ab")); // 4
C# : public int CompareTo(string); และ public static int Compare(string, string);
method เจ้าปัญหาของภาษานี้เลยละครับ วิธีการใช้งานของ method แรกนั้นก็เหมือนกับ Java เลยครับ เพียงแต่ว่าผลลัพธ์นั้นจะเป็นเหมือน strcmp ของ C ครับ คือผลลัพธืมีแค่ {-1, 0, 1}
string s = "abc";
string t = "abz";
Console.WriteLine(s.CompareTo(t)); // -1
Console.WriteLine(string.Compare(s, t); // -1
แต่ปัญหามันอยู่ที่ว่ามันดันเรียงเอาตัวอักษรตัวเล็กมาก่อนตัวอักษรตัวใหญ่(ซึ่ง ASCII code ของตัวใหญ่จะมาก่อนตัวเล็ก)
Console.WriteLine("A".CompareTo("a"));
Console.WriteLine(string.Compare("A", "a"));
ทั้งคู่ให้ผลลัพธ์เป็น + ทั้งคู่ครับ นั่นก็หมายความว่า A มาหลัง a (ซึ่งตรงข้ามกับ ASCII)
ยังไม่หมดแค่นั้นครับ ปัญหาแรกยังพอยอมรับได้ แต่อันต่อจากนี้ผมมึนครับ
Console.WriteLine(string.Compare("+", "-"));
Console.WriteLine(string.Compare("+789", "-789"));
อันล่าง return -1 แต่อันบนดัน return +1 ซึ่งมันควรจะได้ -1 เหมือนกันเพราะ '+'(ASCII code 43) มาก่อน '-'(ASCII code 45)
ผมก็ไม่รู้สาเหตุนะครับ เอาเป็นว่าอย่าใช้สอง method นี้ละกันครับ
แล้วก็จะมีคำถามตามมาว่าแล้วจะเปรียบเทียบ string ยังไงล่ะ ?
จริง ๆ แล้วยังเหลือ method อีกตัวนึงครับ นั่นก็คือ
public static int CompareOrdinal(string, string);
อันนี้จะให้ผลที่ถูกต้องแล้วนะครับ โดยผลที่ได้นั้นก็เหมือนกับ compareTo ของ Java
Console.WriteLine(string.CompareOrdinal("+", "-"));
Console.WriteLine(string.CompareOrdinal("+789", "-789"));
โดยทั้งคู่จะ return -2 เหมือนกันแบบเดียวกับ Java ดังนั้นเวลาใช้งานนี่ก็ลืม 2 method แรกไปได้เลย มาใช้แต่ static CompareOrdinal นะครับ
ลิงค์ที่เกี่ยวกับ C#
รวม Tutorial, reference, help: http://www.programmingtutorials.com/csharp.aspx
SharpDevelop IDE: http://www.icsharpcode.net/OpenSource/SD/
.NET Framework& SDK : http://msdn.microsoft.com/netframework/
SharpDevelop IDE: http://www.icsharpcode.net/OpenSource/SD/
.NET Framework& SDK : http://msdn.microsoft.com/netframework/
Test เล็กน้อย ของ C#
มี test เล็ก ๆ น้อย ๆ มาให้ทำกันเล่น ๆ ครับ บางข้อก็สำหรับคนที่หัดเขียนมาบ้าง บางข้อนี่สำหรับคนที่เขียนเป็น แล้วก็อาจจะตอบไม่ถูกได้ (ตอนคิดโจทย์บางข้อ ผมยังตอบผิดเลย)
โปรแกรมนี้ให้ค่าอะไร ถ้าอินพุทเป็น 30
float cel, fah;
cel = float.Parse(Console.ReadLine());
fah = 9 / 5 * cel + 32;
Console.WriteLine("{0} Celsius = {1} Fahrenheit", cel, fah);
--------------------------------------------------------------------------------
code ด้านล่างข้อไหนที่สามารถคอมไพล์ผ่าน
string s;
s = "c:\windows\system32";
Console.WriteLine(s);
string s;
s = "c:\temp";
Console.WriteLine(s);
string s;
s = "10";
s = s + 5; Console.WriteLine(s);
--------------------------------------------------------------------------------
โปรแกรมข้างล่างเหล่านี้จะคอมไพล์ผ่านหรือไม่
int x = 7++;
float f = 1.5f;
f++;
int x = 0, y = 0;
Console.WriteLine(x+++++y);
--------------------------------------------------------------------------------
การประกาศ Main method ในข้อใดที่คอมไพล์ผ่านบ้าง
class MainClass {
private static void Main() {
}
}
class MainClass {
public static int Main() {
return 0;
}
}
class MainClass {
public static void Main() {
}
public static void Main(string[] args) {
}
}
class MainClass {
public static void Main() {
}
public void Main() {
}
}
class MainClass {
public static void Main() {
}
public static void Main(int n) {
}
}
class MainClass {
public static void Main() {
}
}
class SecondClass {
public static void Main() {
}
}
class MainClass {
public static void Main() {
;return;
}
}
class MainClass {
public static void Main()
{ { } }
}
ข้อใดต่อไปนี้เป็น valid identifier บ้าง(คือสามารถเอาไปตั้งชื่อตัวแปร, ชื่อ method, ชื่อ class, ชื่อ namespace ได้)
$$$
_
@ten
@at@
@class
@x-y
Main
args
โปรแกรมเมอร์ C++ คนหนึ่ง มาเขียน C# แล้วเค้าเผลอประกาศคลาสแบบนี้
class MainClass {
....
};
ถามว่าจะคอมไพล์ผ่านมั้ย
โปรแกรมนี้ให้ค่าอะไร ถ้าอินพุทเป็น 30
float cel, fah;
cel = float.Parse(Console.ReadLine());
fah = 9 / 5 * cel + 32;
Console.WriteLine("{0} Celsius = {1} Fahrenheit", cel, fah);
--------------------------------------------------------------------------------
code ด้านล่างข้อไหนที่สามารถคอมไพล์ผ่าน
string s;
s = "c:\windows\system32";
Console.WriteLine(s);
string s;
s = "c:\temp";
Console.WriteLine(s);
string s;
s = "10";
s = s + 5; Console.WriteLine(s);
--------------------------------------------------------------------------------
โปรแกรมข้างล่างเหล่านี้จะคอมไพล์ผ่านหรือไม่
int x = 7++;
float f = 1.5f;
f++;
int x = 0, y = 0;
Console.WriteLine(x+++++y);
--------------------------------------------------------------------------------
การประกาศ Main method ในข้อใดที่คอมไพล์ผ่านบ้าง
class MainClass {
private static void Main() {
}
}
class MainClass {
public static int Main() {
return 0;
}
}
class MainClass {
public static void Main() {
}
public static void Main(string[] args) {
}
}
class MainClass {
public static void Main() {
}
public void Main() {
}
}
class MainClass {
public static void Main() {
}
public static void Main(int n) {
}
}
class MainClass {
public static void Main() {
}
}
class SecondClass {
public static void Main() {
}
}
class MainClass {
public static void Main() {
;return;
}
}
class MainClass {
public static void Main()
{ { } }
}
ข้อใดต่อไปนี้เป็น valid identifier บ้าง(คือสามารถเอาไปตั้งชื่อตัวแปร, ชื่อ method, ชื่อ class, ชื่อ namespace ได้)
$$$
_
@ten
@at@
@class
@x-y
Main
args
โปรแกรมเมอร์ C++ คนหนึ่ง มาเขียน C# แล้วเค้าเผลอประกาศคลาสแบบนี้
class MainClass {
....
};
ถามว่าจะคอมไพล์ผ่านมั้ย
สมัครสมาชิก:
ความคิดเห็น (Atom)