ยุทธจักร JavaScript

ทีแรกว่าจะเขียนหนังสือเกี่ยวกับ JavaScript แหละ แต่หลังๆ มันมั่วกันไปหมด และก็เขียนไม่เสร็จสักที เลยเอาอันที่เสร็จมาเผยแพร่ก่อนแล้วกันครับ

บทที่ 1 : ดอกไผ่บาน

หมู่บ้านสามใบไผ่อยู่ในเมืองเจิ้งโจว ถึงหมู่บ้านนี้ไม่ได้โด่งดังเหมือนหมู่บ้านหมื่นเหมยของไซมึ้งชวยเสาะแต่ก็มีความสวยงามไม่แพ้กัน ลักษณะเด่นของหมู่บ้านนี้คือต้นไผ่ที่หมู่บ้านนี้มีใบเป็นสามแฉกและพิษร้ายแรง แต่ก็มีผู้คนเดินทางผ่านเข้าออกได้ตลอด ไม่ลึกลับและที่นั่นก็มีโรงเตี๊ยมแห่งหนึ่งตั้งอยู่

“เสี่ยวเอ้อ! หมู่หันสามตัว เป็ดย่างสอง ติ๋มซำห้าเข่ง ให้ไว”

“ขอรับท่าน” เสี่ยวเอ้อรับคำแล้วเอามาเสริฟอย่างรวดเร็ว

ผู้คนเดินขวักไขว่ไปมาหน้าร้าน เสี่ยวเอ้อก็ทำหน้าที่เช็ดโต๊ะเก้าอี้ ถ้วยชามไปพลางรอเสริฟ รอคิดเงิน

“นายท่าน ท่านยังไม่ได้จ่ายเงิน” เสี่ยวเอ้อร้องทักขณะจอมยุทธจะเดินออกหน้าร้านไป

“สามหาว!”

….

นายอำเภอเจิ้งโจวรีบมาตรวจสอบตามคำแจ้งของชาวบ้าน พบป้ายโรงเตี้ยมขาดครึ่งหนึ่งและเมื่อนายอำเภอเดินเข้ามาตรวจสอบด้านในก็พบศพกองเกลื่อนร้าน

“เรียนท่านนายอำเภอ ทหารได้ตรวจสอบแล้ว ตายหมดยกเว้นเด็กคนนี้ขอรับ” ทหารรายงานกับนายอำเภอพลางหันหน้าไปมองเด็กชายอายุราว 14–15 ปีคนหนึ่ง กอดพ่อร้องให้อยู่

“เสี่ยวปอ ฟะ~ฟะฟัง พ่อนะ เจ้าจงไปตามหา~~ ปรมาจารย์โยดาที่เขาเหลียงซานแล้วเขาจะสอนวิชาเจ้า”

“ท่านพ่อ อย่าเพิ่งตาย ท่านพ่ออ ท่านพ่ออ~อ” เด็กชายร้องไห้

….

“ดูท่าเจ้าเป็นใครมาจากไหน?” นายอำเภอกล่าวถามเมื่อเห็นเด็กเลิกร้องให้สักพักแล้ว

“ข้าน้อยเสี่ยวปอเป็นเสี่ยวเอ้อที่นี่ พ่อข้าเป็นเบ้ที่โรงเตี๊ยม แม่ข้าเป็นใบ้ถูกพิษตายเมื่อหลายปีก่อน พ่อแม่ข้าพาข้าที่นี่ด้วยตั้งแต่เด็กๆ ข้าช่วยงานโรงเตี๊ยมนี้ ที่นี่ทุกคนล้วนมีบุญคุณกับข้า แค้นนี้ข้าต้องชำระ! ” เด็กชายกล่าวท่ามกลางความสะอื้นไห้

….

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

~ ดอกไผ่บาน พยานแห่งรัก บานเพื่อลาจาก เจ้าจงปล่อยวาง ~

บทที่ 2 : คุกเข่าหมื่นปีหมื่นๆปี

เขาเหลียงซานเป็นศูนย์รวมวรยุทธ จอมยุทธท่านใดที่ชีวิตไม่ได้เกี่ยวข้องกับเขาเหลียงซานนี่เรียกว่าเกิดมาเสียชาติเกิดกันเลยแท้ๆ แต่การจะเข้าไปหาอาจารย์โยดาข้างในตามที่พ่อข้าได้สั่งเสียไว้ก่อนตายก็ดูจะเป็นเรื่องยากแต่ก็ยังดีที่พ่อข้าทิ้งผอบไว้ให้ ในบันทึกบอกว่าไปถึงเขาเหลียงซานแล้วจึงเปิดใช้ บัดนีก็ได้เวลาอันเป็นมงคลฤกษ์แล้วก็จะขอเชิญประธานขึ้นสู่ยอดเสา เอ้ย! เปิดผอบ เอ้ย! ถูกแล้ว! (ตูว่าแล้วว่ามันจะมั่วจนได้เนื้อเรื่องนิ ไหนๆก็มั่วมาตั้งแต่อาจารย์โยดาแหละมั่วต่อเลยแล้วกัน) ได้ของข้างในมาเป็นป้ายทองผ่านทางชื่อว่า “การ์ดนางฟ้า” หากให้โจรดูโจรก็จะไม่เก็บค่าผ่านทาง หากใครจะโจมตีให้แสดงป้ายนี้ จะไม่มีใครกล้าทำอะไร

….

ชีวิตง่ายดายขึ้นเยอะจนเดินทางมาถึงสำนัก JavaScript ที่สถิตของปรมาจารย์โยดา

“พ่อข้าให้มาหาท่านอาจารย์โยดา ท่านใดคืออาจารย์โยดา” เสี่ยวปอตะโกนอยู่หน้าสำนัก

“เจ้ายังไม่พร้อม” สัตว์ประหลาดตัวเล็กร่างเขียวกล่าวขณะนั่งอยู่หน้าพระพุทธรูป

“ข้าจะคุกเข่าจนกว่าท่านจะรับข้าเป็นศิษย์”

….. 3 วันผ่านไป ไวเหมือนโกหก …..

ใจคอท่านอาจารย์จะไม่สอนข้าจริงๆหรอหว่ะ อุตสาห์เดินทางมาตั้งไกล อาจารย์ไม่ลุกออกมาดูสักติ๊ด หิวข้าวก็หิว ลุกไปหาอะไรกินก่อนดีกว่า ขืนนั่งแบบนี้ต่อไปมีแต่จะตายฟรี คิดดังนั้นก็ลุกไปซัดหมั่นโถว 2 ลูก แล้วกลับไปนั่งคุกเข่าต่อ

“ลุกขึ้นเถอะ” เสียงดังออกมาจากในสำนัก “เข้ามาใกล้ๆนี่ซิ” เสียงสำทับเข้ามาอีกทีจากผู้เฒ่าตัวเขียวร่างเล็ก

“ท่านอาจารย์รับข้าเป็นศิษย์แล้วหรอ” เสี่ยวปอร้องถาม อาจารย์โยดาหันหน้ามา แว้บหนึ่งก็ล้มลงไป เสี่ยวปอรับเข้าไปพยุง “เจ้าพร้อมแล้ว” เป็นคำพูดสุดท้ายของอาจารย์โยดาจากนั้นก็สิ้นใจ (เชรี้ยเอ้ยไม่ได้สอนอะไรเล้ยอาจารย์)

….

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

เว้ยเส้าเทียนเห็นท่าไม่ดีเพราะอยู่สำนักของศัตรู ค่ายกลเยอะแยะ เลยชิ่งกลับไปตั้งหลักก่อน เสี่ยวก็ก็ขอบคุณจางฟู่จือเป็นการใหญ่ และหลังจากทราบเรื่องว่าปรมาจารย์โยดารับเสี่ยวปอเป็นลูกศิษย์แล้วจางฟู่จือจึงตัดสินใจจะสอนวิทยายุทธให้กับเสี่ยวปอและพี่น้องร่วมสำนัก JavaScript ตั้งแต่บัดนั้นเป็นต้นมา…

……

เด็กคนหนึ่งเขาเลี้ยงแกะ

เขาสงสัยว่าในแต่ละวันแกะเขากลับเข้าคอกครบไหม

เด็กน้อยใช้ก้อนหินแทนตัวแกะ

ออกคอกหยิบออก เข้าคอกหยิบเข้า

เด็กคนนั้นรู้ว่าแกะเข้าคอกครบไหม

แต่เขาไม่รู้ว่าเป็นคนสร้างการนับจำนวน

……

cc: เด็กเลี้ยงแกะ

บทที่ 2 : ยุทธจักร JavaScript

“ไม่ต้องพูดพล่ามทำเพลง มาเรียนกันเลย” จางฟู่จือกล่าวไว้ “เจ้าต้องเริ่มเข้าใจก่อนว่าเจ้าสำนัก JavaScript คือ Brendan Eich (เบรนแดน อิช) บางครั้งคนก็เรียกภาษานี้ว่า ECMAScript ซึ่งเป็นคำทางการ ปัจจุบันนี้ตกทอดสู่ทายาทเป็นรุ่นที่ 6 หรือ ECMAScript 6 นั่นเอง พวกเจ้าจงจำไว้ว่า ECMAScript, ECMAScript 2015, ECMAScript 6, ES6, JavaScript มันคือของอย่างเดียวกันปัจจุบันนี้ Ecma International เป็นองค์กรที่ดูแลสำนักเราอยู่ ธงของสำนักเราเป็นแบบนี้” พูดพลางหยิบธงเหลืองขึ้นมา

“Brendan Eich เป็นคนเมกา เมื่อปี 1995 ทำงานอยู่ Netscape แรกเริ่ิมเดิมทีตั้งใจจะเอาภาษา Scheme ไปยัดใน Web browser แต่ภายหลังก็เปลี่ยนไปสร้างภาษาใหม่ใส่เข้าไปแทน อันที่จริงแล้วเพราะ Netscape กับ Microsoft กำลังแข่งกันสร้างเทคโนโลยีเกี่ยวกับเว็บอยู่, Netscape เองอยากได้ระบบที่มันทำงานได้แบบ Applet คือมันทำงานได้บน Web browser เลยและ Cross-platform หรือทำงานบนระบบปฏิบัติการอะไรก็ได้ตอนนั้นคิดกันถึงขนาดว่าจะทำ OS ที่มี Java ติดมาด้วยเลยทีเดียว ตอนหลังก็เลยสรุปต้องสร้างภาษา JavaScript ขึ้นมาแทนเพราะภาษาที่มีอยู่เช่น C++ หรือ Java มันต้องใช้ลมปรานในการใช้งานมากเกินไป และ JavaScript ก็ยังไม่ต้องลง Plug-in เพิ่ม ขณะที่ Applet ต้องมี JVM บนเครื่องด้วย”

“JavaScript ถูกสร้างภายใน 10 วันเพื่อให้ทัน Navigator 2.0 Beta (กันยายน 1995) ใช้ชื่อตอนพัฒนาว่า Mocha แต่ชื่อเป็นทางการตอนนั้นคือ LiveScript ต่อมาได้เปลี่ยนชื่อเป็น JavaScript เมื่อวันที่ 4 ธันวาคม 1995 ที่เปลี่ยนเป็นชื่อ JavaScript เพราะช่วงนั้น Java กำลังดังและออกมาในช่วงใกล้ๆกัน Netscape กับ Sun เลยประกาศเปลี่ยนชื่อมันร่วมกันซะเลยเรียกได้ว่าตีกินกระแสความดังของ Java ก็ไม่ผิดนัก”

“แล้ว Java กับ JavaScript มันต่างกัยยังไงครับท่านอาจารย์?” เสี่ยวปอเอ่ยถาม

“หลายคนคิดว่า Java กับ JavaScript เป็นของที่ใกล้เคียงกัน แต่ความจริงแล้วสองอย่างนี้ต่างกันมาก Java สร้างโดย Sun MIcrosystems บางครั้งก็เรียกสั้นๆ ว่า Sun เจ้าสำนัก Java คือ James Gosling (เจมส์ กอสลิง)วิทยายุทธของพรรคนี้ใช้งานเริ่มต้นยากสักหน่อยถ้าคนไม่เคยเรียนยุทธมาก่อน ที่สอนๆกันตามสำนักต่างๆก็มักจะสอน C ก่อนแล้วตามด้วย Java เพราะหากเริ่มที่ Java เลยธาตุไฟอาจเข้าแทรก พลังแตกสลาย ได้โปรได้รีไทล์กันสักรอบเลยทีเดียว ส่วน JavaScript นั้นเป็นภาษาที่เขียนง่ายกว่าแม้ไม่เคยฝึกยุทธอะไรมาก่อนก็เรียนได้ บางภาษาอย่างเช่น PHP และ JavaScript เริ่มจากเป็นยุทธที่มักง่ายต่อมาภายหลังก็เพิ่มความซับซ้อนขึ้นเมื่อมีคนเป็นยุทธมากขึ้น”

“ถึงแม้ Java และ JavaScript จะมีแนวคิดหลักวิชายุทธคล้าย C และ JavaScript ก็หยิบยืมหลายแนวคิดของ Java มาใช้ แต่นั่นมันก็เป็นอดีตไปแล้ว และยังมีส่วนที่ต่างกันอีกเช่น

-> ตัวแปรของ JavaScript เป็น Dynamic typing คือไม่ต้องบอกว่าเป็นประเภทอะไรก็ได้บอกแค่ว่าเป็นตัวแปร แต่ Java ต้องบอกด้วยว่าเป็นตัวแปรประเภทอะไร

-> JavaScript ใช้วิธีการ Interpleted คือการแปลงคำสั่งตรงๆเลยไม่ต้อง Compile เป็น Binary หรือ Bytecode ก่อน ส่วน Java ตัอง Compiled ให้เป็น Bytecode ก่อนถึงจำรันได้ (Binary ทำงานได้เลย แต่ Bytecode เป็น Binary แบบพิเศษที่ต้องทำงานบน JVM ตัว JVM จะแปลงเป็น Binary ที่ทำงานได้บนระบบแต่ละแบบอีกรอบหนึ่ง)

-> JavaScript เป็นภาษาแบบ Prototype-base มองระบบเป็น Prototype หรือต้นแบบสามารถปรับเปลี่ยนรูปได้ได้เยอะแต่จะให้ความรู้สึกว่ามันดูไม่คงทนถาวรเปรียบเสมือนดินน้ำมันปรับเปลี่ยนรูปแบบได้เยอะแต่ถ้าเอามาใช้งานก็พึงใช้งานให้เมาะสม ส่วน Java เป็น Class-base มองระบบเป็นคลาสมีคลาสชื่อ java.lang.Object เป็นพ่อทุกสถาบันทุกคลาสจะสืบทอดจากตรงนี้ ด้วยความที่มันบังคับหลายๆอย่างทำมันมันดูมีโครงสร้างที่ชัดเจนหาข้อผิดพลาดได้ง่าย

-> JavaScript สามารถเขียนเป็น Functional programming มองระบบเป็นฟังก์ชันได้เพราะได้รับแรงบันดาลใจจากภาษา Scheme แต่ใน Java เพิ่งเขียนแบบ Functional ได้ใน Java 8 นี่เอง

สมัยหนุ่มๆนี่นะ Brendan Eich เล่าให้อาจารย์ฟังว่าพอเปิดตัว JavaScript มานักพัฒนาเว็บนี่สนใจกันมากเลยเพราะทำอะไรได้มากกว่าที่ HTML ในตอนนั้นสามารถทำได้ และขียนโปรแกรมได้ง่ายกว่า C++ หรือ Java มากโข ตอนหลัง Microsoft เห็นท่าจะไปได้สวยเลยเปิดตัว JScript ใน IE 3 ปรากฏว่าไปไม่รอดโปรเจกเดี้ยง สมาชิกคงจะเห็นว่าไปปลูกเมล่อนจะดีกว่า”

“สำนักเราไม่ได้อยู่อย่างเดียวดายนักการนำไปใช้ก็มักจะใช้วิชายุทธของ HTML, JavaScript และ CSS และถึงแม้เราจะอยู่ในพวกเว็บไซต์เป็นหลัก แต่ก็มีบางสำนักสาขาที่เอา JavaScript ไปทำงานเป็นภาษาโปรแกรมหลัก หมายถึงว่าสามารถทำงานได้แบบเดียวกับ C++ หรือ Java เช่นสำนักสาขาที่เป็น Node.js”

“แล้วมันทำงานยังไงครับท่านอาจารย์” เด็กหนุ่มถามต่อ

อาจารย์เงียบไปสักพักแล้วหันไปวาดรูปบนกระดาน

……

ไม่ใช่กู ต้องเป็นมึงซิ มึงอยากได้อะไร มึงก็ต้องทำเอง

มึงไม่ต้องผลักภาระมาให้กู ถ้ากูอยากได้กูก็จะทำเอง

……

cc: กูนี่แหละ

“นี่คือแผนภาพการทำงานของ Web browser เช่น Google Chrome, Internet Explorer (IE), หรือ Mozilla Firefox เมื่อเราเข้าเว็บไซต์ Web browser ของเราจะร้องขอข้อมูลจาก Web server พอได้ข้อมูลมาแล้ว Web browser ก็จะเอาข้อมูลมาตีความว่ามันหมายความว่ายังไงตัว JavaScript จะถูกตีความโดย JavaScript Engine ซึ่งเป็น Virtual Machine ที่ใช้อ่านคำสั่งจากภาษา JavaScript แล้วทำงานแบบ Interpreted ได้เลยไม่ต้องคอมไพล์เลยแก้ไขคำสั่งและรันใหม่ได้อย่างรวดเร็วและมีอีก Eninge หนึ่งคือ Layout Engine ภาษา HTML และ CSS จะถูกอ่านและตีความโดย Engine นี้ กระบวนการที่เล่ามาทั้งหมดเกิดขึ้นในฝั่ง Web browser ทำให้เราเห็นว่าบางทีทำไม Web browser เป็นเว็บแล้วหน้าเพี้ยนๆ นั่นก็เพราะ Engine 2 ตัวนี้มันทำงานไม่เหมือนกันหน่ะซิ เช่นปัจจุบันนี้ Google Chrome ใช้ JavaScript Engine ชื่่อ V8 (ตัวเดียวกับที่อยู่ใน Node.js) สร้างโดยมหาเทพ Lars Bak (ลาส์ บัคค์) และใช้ Layout Engine ชื่อ Blink ที่ปรับแต่งเพิ่มมาจาก WebKit (ใน iOS ยังเป็น WebKit อยู่) แต่ใน Firefox ใช้ JavaScript Engine ชื่อ SpiderMonkey ที่ Brendan Eich ดูแลอยู่เมื่อสมัยโน้น และ Layout Engine ชื่อ Gecko

แต่ถึง Engine ข้างในจะต่างกันก็ตาม แต่ว่าถ้าไม่ใส่การทำงานอะไรแปลกๆเข้าไประบบก็ไม่ค่อยเพี้ยนหรอก ยังทำงานได้ได้อยู่ดี มันจะเพี้ยนก็ตอนพยายามยัดของประหลาดๆเข้าไปนั่นแหละ”

Like what you read? Give Bhuridech Sudsee a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.