NodeJS ตอนที่ 3 [JavaScript Basic และการเขียนโมดูล]

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

JavaScript Value Type

ภาษา JavaScript มีการเก็บค่าอยู่ 3 แบบด้วยกัน คือ

  • boolean ค่าตรรกะ true , false
  • numeric ค่าตัวเลข Number.MIN_VALUE 5e-324 – Number.MAX_VALUE 1.7976931348623157e+308
  • string “hello” , ‘hello’

Reference Type

การเก็บค่าแบบ Reference Type เก็บในรูปแบบยอดฮิตอย่าง JSON (JavaScript Object Notation)

{"firstName":"John", "LastName":"Doe" , "Age":30}

 

การประกาศตัวแปร

ใช้คำว่า var ขึ้นต้น ตามด้วยชื่อตัวแปรตามกฎการตั้งชื่อของภาษาทั่วๆไป

var a = "Hello NodeJS" , b = false , c = 99.999;
  • หากเราประกาศตัวแปรขึ้นมาเลยไม่มี var จะกลายเป็น Global variable เช่น d =”Hello JavaScript”;
  • ความน่ากล้วของ JavaScript คือความยืดหยุ่นสูง ไม่เป็นภาษาแบบ typesafe คือวันดีคืนดีเราประกาศตัวแปรเป็นตัวเลขไว้ เช่น var a = 1; อยู่ดีๆเปลี่ยนเป็น a = “Hello” ก็ไม่ผิดแต่อย่างใด แต่โปรแกรมที่เราเขียนไว้ผิดได้แน่นอน ถ้าเราเอา a ไปบวกตัวเลขต่อ เป็นปัญหาที่คนเขียน JavaScript เจอบ่อยๆและต้องระวังอย่างมาก

การประกาศฟังก์ชั่น

มีรูปแบบตามโค้ดด้านล่าง

function functionName (){

//โค้ด ;

}
var f = function(){
}

// การเรียกใช้
f();

การเก็บค่าแบบอาร์เรย์

var d = [1,2,3,4,5,"Test","JavaScript"];
var f = [{id:1,fname:'John',lname:"Doe"},{id:2,fname:"Jane",lname:"Doe"}];

เงื่อนไข if else 

var time = new Date().getHours();
if (time < 20) {
    console.log("Good day");
}else {
    console.log("Good evening");
}

switch

var day;
switch (new Date().getDay()) {
    case 0:
        day = "Sunday";
        break;
    case 1:
        day = "Monday";
        break;
    case 2:
        day = "Tuesday";
        break;
    case 3:
        day = "Wednesday";
        break;
    case 4:
        day = "Thursday";
        break;
    case 5:
        day = "Friday";
        break;
    case 6:
        day = "Saturday";
        break;
    default:
        day = "Unknown Day";
}

for ลูป

var text = "";
var i;
for (i = 0; i < 5; i++) {
    text += "The number is " + i + "<br>";
}

เราสามารถนำโค้ด JavaScript มาทดสอบใน Browser ได้เลย เช่น ใน Google Chrome หรือ Firefox ให้เข้าหน้า Console

jschorme

อยากศึกษา JavaScript เพิ่มเติมมีแหล่งศึกษาดีๆมากมาย เช่น http://www.w3schools.com/jsref/default.asp

มาเขียนโค้ดใน NodeJS กันดีกว่า

Module โมดูล คือ

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

  1. สร้างไฟล์ชื่อ aggregation.js
  2. ป้อนโค้ด ดังนี้
exports.sum = function(){
	this._sum = 0;
	for (var i = 0; i < arguments.length; i++) {
		this._sum+=arguments[i];
	}
}

exports.avg = function(){
	this._sum = 0;
	for (var i = 0; i < arguments.length; i++) {
		this._sum+=arguments[i];
	}
	this._avg = this._sum / arguments.length;
}

3. สร้างไฟล์ชื่อ ch3_module.js

4. ป้อนโค้ด ดังนี้

var a = require('./aggregation');
	a.sum(1,2,4,5,6,7);
	console.log(a._sum);
	a.avg(4,2,5,6,7,9,18,11);
	console.log(a._avg);

5. เปิดโปรแกรม Terminal หรือ Command Line ใน Window เข้าไปที่ path ของไฟล์ ch3_module.js พิมพ์

node ch3_module.js
25
7.75

อธิบายโค้ด

  • exports เป็นออบเจคที่ใช้ประกาศเป็น module ให้เรียกใช้งานได้
  • exports.sum = function() ประกาศฟังก์ชั่นสำหรับใช้บวกค่า
  • JavaScript มือใหม่อาจจะงงถ้าเขียนภาษาอื่นมา ก็ sum = function() ในวงเล็บไม่เห็นระบุตัวแปรอะไรมาแล้วจะเอาอะไรมาบวกกันได้ ใน arguments จะเป็นการเก็บค่าตัวแปรต่างๆไว้ ซึ่งภาษา JavaScript มันยืดหยุ่นมากให้เราป้อนค่าอะไรมาก็ได้ ดังนั้นถ้าค่าที่เราป้อนมาไม่ใช่ตัวเลขทั้งหมด ฟังก์ชั่นนี้ก็ทำงานผิดวัตถุประสงค์แน่ๆ
  • ที่ไฟล์ ch3_module.js เราอ้างถึงฟังก์ชั่นที่เขียนไว้แล้วใน aggregation.js โดยใช้คำสั่ง
    var a= require('./aggregation');

    ก็จะได้ฟังก์ชั่น sum กับ avg ในโค้ด aggregation.js มา ในการใช้ require ไฟล์ที่อ้างถึงไม่ต้องใช้ .js nodejs จะเติมให้เอง การอ้างพาธใน nodejs นั้น ในการใช้งานจริง ./ ,../, ../../  ควรอ้างแบบไหนบ้างนั้นเป็นเรื่องที่หน้าปวดหัวมาก ในการเขียนแอพใช้งานจริง ผมใช้ไลบรารี่ชื่อ rootpath อ้างแบบเดียวไปเลย  และเป็นการสร้างมาตรฐานที่ดีให้กับทีมด้วยหากต้องพัฒนาหลายๆคน ใครใจร้อนขี้เกียจรอบทความก็ไปลองใช้ดูได้ https://www.npmjs.com/package/rootpath

พบกับตอนหน้า Express Web Framework