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
อยากศึกษา JavaScript เพิ่มเติมมีแหล่งศึกษาดีๆมากมาย เช่น http://www.w3schools.com/jsref/default.asp
มาเขียนโค้ดใน NodeJS กันดีกว่า
Module โมดูล คือ
ในการพัฒนาแอพพลิเคชั่น กว่าจะได้แอพมาหนึ่งตัว โค้ดมากมายมหาศาลหลายหมื่นถึงล้านบรรทัดแน่นอนแล้วแต่ขนาดของซอฟท์แวร์ แม้ว่าภาษาสมัยใหม่เดี๋ยวนี้จะใช้โค้ดที่สั้นลงแล้วก็ตาม ดังนั้นเพื่อความเป็นระเบียบ นำสิ่งที่เคยพัฒนาไว้แล้วกลับมาใช้ใหม่ เราจึงจำเป็นต้องเข้าใจการพัฒนาแบบโมดูล
- สร้างไฟล์ชื่อ aggregation.js
- ป้อนโค้ด ดังนี้
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
Leave a comment!
You must be logged in to post a comment.