การเขียน JavaScript จะต้องมีความรู้การเขียน HTML พอควร เพราะ JavaScript จะทำงานควบคู่กับ HTML ดังนั้นก่อนจะเริ่มต้นเรียน JavaScript ควรจะทำความเข้าใจกับ HTML ก่อน
การเขียน JavaScript จะเขียนภายใน script tag โดยจะเขียนฝังไว้ใน HTML เลยหรือนำเข้าจากไฟล์ .js ภายนอกก็ได้ ตัวอย่างการเขียนฝังใน HTML
สังเกตที่ บรรทัด 6-8
ผลลัพของตัวอย่างด้านบน
ตัวอย่างการเขียนโดยนำเข้าจากไฟล์ภายนอก
Script Example
<-- Example of inefficient script positioning -->
Hello world!
สังเกตที่ บรรทัด 5-6
สังเกต script tag จะมี type="text/javascript" ซึ่งใส่ก็ได้ไม่ใส่ก็ได้ เพราะสำหรับ HTML5 script tag จะถูก Default เป็น JavaScript อยู่แล้ว
คำแนะนำ
จาก Script ตัวอย่างที่ผ่านมา จะเขียน JavaScript ไว้ใน head tag ของ HTML ซึ่งการทำงานของเว็บไซต์เมื่อเจอ script tag หากมี src attribute โปรแกมจะหยุดรอ แล้วโหลดไฟล์จากภายนอกและประมวลผลทันทีแล้วจึงจะทำงานต่อไป ถึงแม้ว่าโปรแกรมจะทำงานได้อย่างปกติ แต่การเขียนวิธีนี้จะทำให้เกิดปัญหาทางด้านความเร็วของ website เพราะต้องเสียเวลาหยุดรอโหลดและประมวลผลไฟล์ JavaScript เสร็จก่อนทำให้หน้าเว็ปเป็นหน้าขาวๆ
ดังนั้น หากไม่จำเป็นต้องให้ JavaScript ประมวลผลก่อน ควรแทรก script tag ไว้ข้างล่างสุดของ body tag ดังตัวอย่างด้านล่างบรรทัด 9-11 เพื่อให้เนื้อหาของเว็ปไซต์โหลดเสร็จก่อนแล้วโหลดและประมวลผลไฟล์ JavaScript ทำให้อย่างน้อยผู้ใช้ได้เห็นหน้าเว็ปเกิดการโหลดไม่ใช่หน้าขาวๆ เปล่าๆ
Script Example
Hello world!
<-- Example of recommended script positioning -->
เท่านี้เองก็ได้รู้ตำแหน่งของการเขียน JavaScript แล้วพบกันใหม่ในบทความถัดไปเน้ออ ..
C# Operators, Types, and Variables
วัตถุประสงค์ของบทความนี้นะครับ
เข้าใจว่าตัวแปรคืออะไร
ชนิดของตัวแปรคืออะไร
ตัวดำเนินการคืออะไร
ตัวแปรและชนิดของข้อมูล Variables and Types
ตัวแปร เป็นภาชนะเก็บข้อมูล คุณสามารถใส่ข้อมูลลงไปในตัวแปรและสามารถเรียกใช้ข้อมูลนั้นผ่านตัวแปรเมื่อต้องการ ความหมายของข้อมูลในตัวแปรนั้นจะถูกระบุได้จาก ชนิดข้อมูลของตัวแปร
1. ข้อมูลชนิดตรรกะ The Boolean Type
การประกาศตัวแปร boolean จะใช้คำว่า bool ซึ่งจะเก็บค่าเพียง 2 ค่าเท่านั้นคือ true , false ในภาษาอื่น เช่น ภาษา C, C++ สามารถใช้เลข 0 แทน false และเลข 1 แทน true ได้ ในภาษา C# จะไม่ได้ ในตัวอย่างที่ 1 เป็นการยกตัวอย่างการใช้เขียนโปรแกรม
ตัวอย่างที่ 1 แสดงค่าใน Boolean
using System ;
class Booleans
{
public static void Main ()
{
bool content = true ;
bool noContent = false ;
Console.WriteLine("It is {0} that C# Station provides C# programming language content." , content);
Console.WriteLine("The statement above is not {0}." , noContent);
}
}
ผลลัพธ์
It is True that C# Station provides C# programming language content.
The statement above is not False.
2. ชนิดข้อมูลตัวเลข Integral Types
ในภาษา C# Integral Types เป็นหมวดของชนิดข้อมูลที่เป็นตัวเลขจำนวนเต็ม ทั้ง signed, unsigned, และข้อมูลตัวอักษร (char) ซึ่ง char เป็น Unicode character หาอ่านได้่ที่ http://www.unicode.org/
Type Size (in bits) Range
sbyte 8 -128 to 127
byte 8 0 to 255
short 16 -32768 to 32767
ushort 16 0 to 65535
int 32 -2147483648 to 2147483647
uint 32 0 to 4294967295
long 64 -9223372036854775808 to 9223372036854775807
ulong 64 0 to 18446744073709551615
char 16 0 to 65535
ชนิดข้อมูลตัวเลขชุดนี้สามารถนำมาคำนวณทางคณิตศาสตร์ ยกเว้น Char คุณสามารถเลือกใช้ชนิดข้อมูลจากตารางข้างบนนี้ตามความเหมาะสมโดยพิารณาจากค่า Range ให้เหมาะสมกับโปรแกรมของคุณ
ตัวอย่างที่ 2 โปรแกรมจะ number1 และ number2 มาบวกกัน
using System ;
namespace ConsoleApplication1
{
class Program
{
static void Main (string [] args)
{
int number1, number2;
Console.WriteLine("Please enter a number:" );
number1 = int .Parse(Console.ReadLine());
Console.WriteLine("Thank you. One more:" );
number2 = int .Parse(Console.ReadLine());
Console.WriteLine("Adding the two numbers: " + (number1 + number2));
Console.ReadLine();
}
}
}
3.ชนิดข้อมูลเลขทศนิยม Floating Point and Decimal Types
ชนิดข้อมูลทศนิยมทั้ง float และ double จะถูกใช้แทนจำนวนจริง ส่วน decimal ส่วนมากใช้ในทาง financial หรือ money values.
Type Size (in bits) precision Range
float 32 7 digits 1.5 x 10-45 to 3.4 x 1038
double 64 15-16 digits 5.0 x 10-324 to 1.7 x 10308
decimal 128 28-29 decimal places 1.0 x 10-28 to 7.9 x 1028
การใช้ชนิดข้อมูลทศนิยม ( Floating Point ) เรามันใช้เมื่อมีการหารหรือคำนวณเศษส่วนที่ค่าไม่ลงตัว ส่วนการคำนวณทางการเงิน decimal เป็นทางเลือกที่ดีที่สุด เพราะว่าเราสามารถหลีกเลี่ยงปัญหา rounding errors ได้
4. ข้อความ The string Type
String เป็นกลุ่มของ
Char ที่เรียงต่อกันเป็นข้อความ ตัวอักษรบางตัวพิมพ์ออกหน้าจอไม่ได้ แต่เรายังต้องการใช้มัน เพราะฉะนั้นในภาษา C# จึงมีกรณีพิเศษเมื่อต้องการใช้อักษรเหล่่านั้นโดยการใช้เครื่องหมาย '\'
Escape Sequence Meaning
\' Single Quote
\" Double Quote
\\ Backslash
\0 Null, not the same as the C# null value
\a Bell
\b Backspace
\f form Feed
\n Newline
\r Carriage Return
\t Horizontal Tab
\v Vertical Tab
ตัวอย่างที่ 3 การประกาศตัวแปร string และการใช้งานเบื้องต้น
โปรแกรมจะแสดงชื่อและนามสกุลตามที่ประไว้ในตัวแปรชื่อ firstName และ lastName จากนั้นโปรแกรมจะรับชื่อและนามสกุลใหม่อีกครั้งและแสดงชื่อนามสกุลใหม่
using System ;
namespace ConsoleApplication1
{
class Program
{
static void Main (string [] args)
{
string firstName = "John" ;
string lastName = "Doe" ;
Console.WriteLine("Name: " + firstName + " " + lastName);
Console.WriteLine("Please enter a new first name:" );
firstName = Console.ReadLine();
Console.WriteLine("New name: " + firstName + " " + lastName);
Console.ReadLine();
}
}
}
5. ตัวดำเนินการ C# Operators
เครื่องหมายในการคำนวณทางคณิตศาสตร์ต่างๆ ทั้งบวก ลบ คูณ หาร ตรรกะ ซึ่งจะต้องใช้ร่วมกับตัวแปรเพื่อหาผลลัพธ์ของสมการซึ่งแสดงตามตารางด้านล่างนี้แล้ว
Category (by precedence) Operator(s) Associativity
Primary x.y f(x) a[x] x++ x-- new typeof default checked unchecked delegate left
Unary + - ! ~ ++x --x (T)x right
Multiplicative * / % left
Additive + - left
Shift << >> left
Relational < > <= >= is as left
Equality == != right
Logical AND & left
Logical XOR ^ left
Logical OR | left
Conditional AND && left
Conditional OR || left
Null Coalescing ?? left
Ternary ?: right
Assignment = *= /= %= += -= <<= >>= &= ^= |= => right
ตัวอย่าง โปรแกรมการใช้ operators ต่างๆ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System ;
class Unary
{
public static void Main ()
{
int unary = 0 ;
int preIncrement;
int preDecrement;
int postIncrement;
int postDecrement;
int positive;
int negative;
sbyte bitNot;
bool logNot;
preIncrement = ++unary;
Console.WriteLine("pre-Increment: {0}" , preIncrement);
preDecrement = --unary;
Console.WriteLine("pre-Decrement: {0}" , preDecrement);
postDecrement = unary--;
Console.WriteLine("Post-Decrement: {0}" , postDecrement);
postIncrement = unary++;
Console.WriteLine("Post-Increment: {0}" , postIncrement);
Console.WriteLine("Final Value of Unary: {0}" , unary);
positive = -postIncrement;
Console.WriteLine("Positive: {0}" , positive);
negative = +postIncrement;
Console.WriteLine("Negative: {0}" , negative);
bitNot = 0 ;
bitNot = (sbyte )(~bitNot);
Console.WriteLine("Bitwise Not: {0}" , bitNot);
logNot = false ;
logNot = !logNot;
Console.WriteLine("Logical Not: {0}" , logNot);
}
}
อธิบายโปรแกรม
17 preIncrement = ++unary;
++unary หมายถึง เพิ่มค่าในตัว unary ขึ้น 1 ก่อน แล้วจึงจะส่งค่าไปให้ preIncrement ดังนั้น preIncrement = 1
20 preDecrement = --unary;
--unary เหมือนบรรทัดที่ 17 แต่เป็นการลดค่าลง ดังนั้น preDecrement จึ่งเท่ากับ 0
23 postDecrement = unary--;
unary-- คือ ส่งค่าไปยัง preIncrement ก่อน แล้วจึงลดค่าลง 1 ทีหลัง ดังนั้น preIncrement = 0
26 postIncrement = unary++;
unary++ เหมือนกับบรรทัดที่ 23 แต่เป็นการเพิ่มค่าขึ้น 1
31 positive = -postIncrement;
32 Console.WriteLine("Positive: {0}" , positive);
33
34 negative = +postIncrement;
35 Console.WriteLine("Negative: {0}" , negative);
ส่วนนี้เป็นเหมือนกันคำนวณทางคณิตศาสตร์นั้นคือ ค่าลบ * ลบ = ค่าบวก, ค่าบวก*ลบ=ลบ
ซึ่งในบรรทัด 31 postIncrement = -1 ; -(-1) = 1
และบรรทัด 34 postIncrement = -1 ; +(-1) = -1
37 bitNot = 0 ;
38 bitNot = (sbyte )(~bitNot);
39 Console.WriteLine("Bitwise Not: {0}" , bitNot);
บรรทัดที่ 38 (~bitNot ) คือการกลับบิต จาก "00000000" = 0 เป็น "111111111" = -1
41 logNot = false ;
42 logNot = !logNot;
43 Console.WriteLine("Logical Not: {0}" , logNot);
บรรทัดที่ 42 !logNot คือการ NOT ทางตรรกะศาสตร์ คือการเปลี่ยนเป็นตรงข้ามคือ false -> true
ผลลัพธ์ที่ได้
pre-Increment: 1
pre-Decrement 0
Post-Decrement: 0
Post-Increment: -1
Final Value of Unary: 0
Positive: 1
Negative: -1
Bitwise Not: -1
Logical Not: true
ตัวอย่างสุดท้าย
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System ;
class Binary
{
public static void Main ()
{
int x, y, result;
float floatresult;
x = 7 ;
y = 5 ;
result = x+y; // 7 + 5 = 12
Console.WriteLine("x+y: {0}" , result);
result = x-y; // 7 - 5 = 2
Console.WriteLine("x-y: {0}" , result);
result = x*y; // 7 * 5 = 35
Console.WriteLine("x*y: {0}" , result);
result = x/y; // 7 / 5 = 1 เพราะเป็นจำนวนเต็มหารจำนวนเต็ม = จำนวนเต็ม
Console.WriteLine("x/y: {0}" , result);
floatresult = (float )x/(float )y; // 7 / 5 = 1.4
Console.WriteLine("x/y: {0}" , floatresult);
result = x%y; // 7 % 5 = 2 เป็นการหารแล้วเอาเศษ 7 / 5 = 1 เศษ 2
Console.WriteLine("x%y: {0}" , result);
result += x; //หมายถึง result = result + x ;ดังนั้นจะได้ result = 2 + 7 = 9
Console.WriteLine("result+=x: {0}" , result);
}
}
ผลลัพธ์ที่ได้
x+y: 12
x-y: 2
x*y: 35
x/y: 1
x/y: 1.4
x%y: 2
result+=x: 9
C# Hello World Tutorial
ถ้าคุณเคยศึกษาภาษาอื่นๆ มาจะรู้ว่าเราเริ่มต้นเขียนภาษาไหนก็ตามต้องเริ่มเขียนโปรแกรม Hello World! เป็นอันดับแรก ในส่วนนี้เป็นพื้นฐานสุดๆของภาษา C# ไม่ต้องห่วงครับเราจะไม่อยู่ในส่วนนี้นานครับ และผมจะไม่พูดถึงการติดตั้งโปรแกรมนะครับ มาดูตัวอย่างการเขียนโค้ด Hello World ในแบบต่างๆ กัน
ตัวอย่างที่ 1
// Hello1.cs
public class Hello1
{
public static void Main ()
{
System.Console.WriteLine("Hello, World!" );
}
}
ผลลัพธ์
อธิบายโค้ด
method หลักทุกตัวต้องอยูในคลาส
ในคลาส System.Console จะมี method ชื่อ WriteLine อยู่ มีสามารถในการแสดงข้อความออกทางคอนโซลได้
ตัวอย่างที่ 2
เพื่อง่ายต่อการเขียนคำสั่งแสดงผลทางหน้าจอในครั้งต่อไปเราสามารถเรียกใช้ System ได้ดังนี้
// Hello2.cs
using System ;
public class Hello2
{
public static void Main ()
{
Console.WriteLine("Hello, World!" );
}
}
ตัวอย่างที่ 3
ถ้าคุณต้องการพิมพ์ข้อมูลเข้าผ่านทาง Command Line เพียงแค่เปลี่ยนเพิ่ม Argument ใน method หลักตามที่แสดงด้านล่าง ซึ่งในตัวอย่างนี้จะนับและแสดงผล Argument ใน Command line
// Hello3.cs
// arguments: A B C D
using System ;
public class Hello3
{
public static void Main (string [] args)
{
Console.WriteLine("Hello, World!" );
Console.WriteLine("You entered the following {0} command line arguments:" ,
args.Length );
for (int i=0 ; i < args.Length; i++)
{
Console.WriteLine("{0}" , args[i]);
}
}
}
ผลลัพธ์
Hello, World!
You entered the following 4 command line arguments:
A
B
C
D
ตัวอย่างที่ 4
การคืนค่า return code โดยเพิ่มคำสั่งตามตัวอย่างด้านล่างนี้เลย
// Hello4.cs
using System ;
public class Hello4
{
public static int Main (string [] args)
{
Console.WriteLine("Hello, World!" );
return 0 ;
}
}
ผลลัพธ์
ตัวอย่างที่ 5
หากคุณรันโปรแกรมแล้วหน้าคอนโซลดับไปไม่ทันดูผลลัพธ์สามารถเพิ่มโค้ดได้ดังนี้
using System ;
class HelloWorld
{
static void Main (string [] args)
{
Console.WriteLine("Hello World" );
Console.ReadKey();
}
}
Compiling and Running with Arguments
ในส่วนนี้เป็นการพูดถึงเมื่อเราต้องการพิมพ์บางอย่างออกทางหน้าจอ เราต้องคอมไพล์โค้ดของคุณและรันมัน ซึ่งเราต้องใช้คำสั่งเพื่อให้มันทำงานนั่นคือ
java (or java.exe)
javac (or javac.exe)
นั่นทำให้คุณต้องไปหาโหลดและติดตั้งตัว JDK (Java Development Kit)
ถ้าเรานำ code จากบทความก่อนหน้านี้มาใส่มันลงไปให้ไฟล์ MyFirstClass.java เราจะต้องคอมไพล์และรัน :
มันจะสร้างไฟล์ MyFirstClass.class แล้วนำมาคอมไพล์เป็น Java code เพื่อรันมัน เราต้องการรัน Java เราใช้แค่ชื่อของ Class เช่น
แบบนี้ผิด
แบบนี้ถูกต้อง
Arguments
ภาษา Java ใน method หลักเราเรียกใช้ Array of String เป็น argument ซึ่งเป็นช่องทางในนำค่าต่างๆ จาก Command Line มาสู่โปรแกรมของเรา และทุก Arrays ในภาษา java จะมีตัวแปร lenght เป็นตัวนับความยาวของ Array เราสามารถเข้าถึง Array แบบง่ายๆ โดย for
public class Arguments {
public static void main ( String[] args) {
for ( int i = 0; i < args. length ; i++) {
System. out . println ( args[ i]);
}
}
}
จากนั้นลองคอมไพล์แล้วรัน
javac Arguments. java
java Arguments arg0 arg1 arg2
Objects
ทุกสิ่งในภาษา Java จะอยู่ใน Classes และ Objects
class Point {
int x;
int y;
}
ใน class point มีการประกาศตัวแปร x , y เราสร้าง object ชื่อ p โดยต้องใช้คำสั่ง new
ในกรณีนี้เราประกาศโดยใช้ default constructor คือไม่มีการให้ค่าเริ่มต้น หรือเราสามารถ constructor เองได้ โดย
class Point {
int x;
int y;
Point( int x, int y) {
this . x = x;
this . y = y;
}
ตอนนี้เราสามารถกำหนดค่าเริ่มต้นให้กับ Object ได้แล้วเช่น
new Point(4, 1)
.
เราสามารถสร้างได้มากกว่า 1 constuctor ดังนั้น
Point
สามารถสร้างได้หลายแบบ ลองสร้างอีกครั้ง
class Point {
int x;
int y;
Point() {
this (0, 0);
}
Point( int x, int y) {
this . x = x;
this . y = y;
}
ข้อสังเกตในการใช้
this
นี้ เราสามารถใช้มันใน constuctor ในการเรียก constuctor อื่น ใน class ของเราเอง
หลังจากเราประกาศ p แล้วสามารถเข้าถึงตัวแปรภายใน Object ได้เลย
Methods
เราสามารถประกาศ method ของ point ได้แล้ว
class Point {
... // code ของเราก่อนหน้านี้
void printPoint () {
System. out . println ( "(" + x + "," + y + ")" );
}
Point center ( Point other) {
// เราคืนค่าจุดศูนย์กลางของจุดนี้และจุดอื่น
return new Point (( x + other. x ) / 2, ( y + other. y ) / 2);
}
Public and Private
เมื่อเราใช้ private
ก่อนตัวแปรหรือ method ในคลาสนั้น นั่นหมายถึงคลาสอื่นจะไม่สามารถใช้ตัวแปรนี้ได้ และเมื่อเราใช้ public
หมายถึงคลาสไหนก็มาใช้ได้ ปกติเราจะเห็น Constuctor ใช้ public
แบบฝึกหัด
สร้าง method ใหม่ชื่อ scale
, จะสร้างจุดที่ใกล้จุด (0,0) ที่สุด โดยลดค่าที่ละครึ่งเช่น (8 , 4) หลังจากนั้นจะเป็น (4 , 2) , (1, 1)
class Point
private double x;
private double y;
public Point ( double x, double y) {
this . x = x;
this . y = y;
}
public void print () {
System. out . println ( "(" + x + "," + y + ")" );
}
// สร้างตรงนี้
}
public class Main {
public static void main ( String[] args) {
Point p = new Point(32, 32);
for ( int i = 0; i < 5; i++) {
p. scale ();
p. print ();
}
}
}
class Point {
private double x;
private double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public void print() {
System.out.println("(" + x + "," + y + ")");
}
public void scale(){
x = x/2;
y = y/2;
}
}
public class Main {
public static void main(String[] args) {
Point p = new Point(32, 32);
for (int i = 0; i < 5; i++) {
p.scale();
p.print();
}
}
}