บทความ

[JavaScript] Array .sort() ใช้งานยังไง?

รูปภาพ
 Array.sort() โดย default ของมันคือการแปลงค่าใน array เป็น string แล้วจับมาเรียงลำดับตามตัวอักษร แต่ก็รองรับการทำ custom sorting แบบอื่น ๆ ซึ่งอยู่ที่เราเขียนเลยว่าจะให้มันทำงานยังไง บทความนี้ตัวอย่างผมจะเน้นเขียนแบบ Arrow function หากใครยังไม่เข้าใจให้ลองอ่านวิธีการเขียนก่อนนะครับตาม link ตัวอย่างการใช้แบบ default const months = ['March', 'Jan', 'Feb', 'Dec']; months.sort();//เรียกแบบนี้ได้เลย console.log(months); // ค่าที่ได้: Array ["Dec", "Feb", "Jan", "March"] const array1 = [1, 30, 4, 21, 100000]; array1.sort(); console.log(array1); // ค่าที่ได้: Array [1, 100000, 21, 30, 4] จะเห็นว่ามันไม่มองค่าตัวเลขเป็นตัวเลข แต่เป็นการเทียบ string แทน โครงสร้างโค้ดการทำ custom sorting ในตัวอย่างด้านล่างจะเป็น callback function ที่ใช้สำหรับโยนให้ .sort() โดยค่า a และ b จะตั้งชื่อยังไงก็ได้ และเราจะทราบแค่ว่าเป็นค่า 2 ค่าที่มาเทียบกันเท่านั้น โดยเบื้องหลังการทำงานก็ขึ้นอยู่กับ compiler ของแต่ละ browser หรือ platform ว

[JavaScript] Array .reduce() ใช้งานยังไง?

รูปภาพ
 .reduce() เป็น built-in function ของ Array ใน JavaScript ใช้งานเพื่อที่จะจัดการกับ array ก้อนนั้นเพื่อให้ได้ค่า ๆ นึงออกมา ยกตัวอย่างเช่น การทำ function sum เพื่อบวกรวมตัวเลขที่อยู่ใน array ทั้งหมดออกมาเป็นค่า sum ค่าเดียว โดย function นี้จะมี syntax หน้าตาแบบนี้ arr.reduce(callback ( accumulator, //ผลจากแต่ละรอบ loop currentValue, //ค่าของสมาชิก array ปัจจุบัน [, index //(optional) index ของ array ปัจจุบัน [, array]] //(optional) เป็น callback ของก้อน array ที่เรานำมาใช้เรียก .reduce โดยปกติมักไม่ได้ใช้ค่านี้ ) [, initialValue] //(optional) ค่าตั้งต้นของ function ซึ่งถ้าเราไม่ใส่ function จะใช้สมาชิกตัวแรกของ array เป็นค่าตั้งต้น //สังเกตดี ๆ คือค่าตั้งต้นนี้จะอยู่นอก callback function ) ขอใช้ตัวอย่าง function sum จากบทความ " Rest parameters คืออะไร " มาเป็นตัวอย่างอีกครั้งละกัน ตัวอย่างแรกลองเขียน callback function ทั่วไปก่อน function sum(...args) { return args.reduce(function(accumulator, currentValue) { return accumulator + currentValue

[JavaScript] Rest parameters คืออะไร

รูปภาพ
 บทความที่ก่อนได้เคยพูดถึง Spread syntax (...)  ไปแล้ว รอบนี้มาพูดถึงสิ่งที่หน้าตาเหมือนกันแต่ใช้งานแตกต่างกันโดยสิ้นเชิงคือ Rest parameters (Rest syntax) เป็นการประกาศ function ขึ้นมาให้สามารถรับ arguments "เท่าไหร่ก็ได้" โดยค่า arguments ที่ถูกส่งมาจะถูกรวบเป็น array ก้อนเดียว แล้วนำไปใช้ต่อ ซึ่งโดยปกติจะพบเห็นได้ทั่วไปใน built-in function ที่มีมาให้ใช้อยู่แล้ว ยกตัวอย่างเช่น Math.max(arg1, arg2, ..., argN); //หาค่าสูงสุด console.log(arg1, arg2, ..., argN); // log ตัวแปรออกมาดูค่าในหน้าต่าง Console แต่เราเองก็สามารถนำมาใช้ประโยชน์ในการสร้าง function เพื่อไว้ใช้งานเองหรือเผื่อให้คนอื่นนำไปใช้งานได้สะดวกขึ้นก็ได้ ขอยกตัวอย่างเป็น function sum ไว้ใช้บวกรวมตัวเลขทั้งหมดที่ส่งเข้ามาใน function function sum(...args) { let total = 0; for (let num of args) { total += num; } return total; } console.log(sum(1, 2)); //3 console.log(sum(1, 2, 3)); //6 console.log(sum(1, 2, 3, 4, 5)); //15 แต่ function ด้านบนจะเจอปัญหาว่าถ้าค่าที่ส่งเข้ามาไม่ใช่ตัวเลขล่ะ? บางค่

[รีวิวเกม] Guardian Tales

รูปภาพ
 Guardian Tales เป็นเกมบนมือถือทั้ง Android และ iOS ตัวเกมเป็นแนว Hero collector + RPG ที่ผสมทั้ง action ทั้ง puzzle และ secret มากมายในแต่ละด่าน กราฟฟิกเป็นตัวการ์ตูนน่ารัก สไตล์ Chibi จุดเด่น / ข้อดีของเกม ภาพน่ารัก มีสไตล์เป็นของตัวเองชัดเจน มีด่านให้เล่นเยอะมาก เล่นเพลินติดงอมแงม รู้ตัวอีกทีคือค่า energy หมดไปแล้ว ด่านหลาย ๆ ด่านมีความท้าทาย ทั้งยากทั้งง่ายปนกันไป ไม่ได้มีแค่ด่านต่อสู้ ด่านที่ให้แก้แต่ puzzle ก็มี secret ในด่านเยอะ เก็บให้หมดถึงจะได้ 3 ดาวของด่าน และได้รับเพชรไปเปิดกาชา เนื้อเรื่องดีมาก น่าติดตาม แถมแฝงมุกมาให้ขำเรื่อย ๆ ระบบการต่อสู้เป็นสไตล์ ARPG  ตัวละครค่อนข้างเยอะ มีระบบคอมโบสกิลแบบลูกโซ่ (chaining skill) เช่น บางสกิลจะใช้ต่อได้เมื่อศัตรูติดลอย ถ้าใครเคยเล่น Gate Six น่าจะนึกภาพออก มีระบบให้ปลดล็อคเยอะ ต้องเล่นผ่านเนื้อเรื่องไปเรื่อย ๆ มีระบบ PVP มี Guild Raid Boss  กิจกรรมมีมาเรื่อย ๆ ไม่ขาด มีระบบ auto ให้เมื่อผ่านด่านไปแล้ว และ auto repeat ลงซ้ำด่านสำหรับด่านหาวัตถุดิบได้เมื่อผ่าน 3 ดาว จุดด้อย / ข้อเสียของเกม ถึงแม้จะมี auto แต่ด้วยความที่ด่านยาวมาก และมี

[Arknights] แนะนำตัวละคร 4 ดาว

รูปภาพ
 หลังจากจบไกด์ก่อนหน้านี้ไป  [Arknights] แนะนำตัวละคร 1-3 ดาว สำหรับมือใหม่ มาอีกไกด์สำหรับตัวละคร 4 ดาวกับเกม Arknights ในบรรดา 4 ดาวส่วนมากจะไม่จำเป็นต้องปั้นขึ้น E2 จะมีเฉพาะบางตัวเท่านั้นที่แนะนำให้ขึ้น E2 มาเริ่มกันเลย Myrtle Vanguard ที่ต้องขึ้น E2 และสกิล 1 ต้องอัพถึงขั้น M3 เป็นตัวละคร 4 ดาวเพียงตัวเดียวที่มีศักยภาพดีมากจนนำไปใช้ในท้ายเกมได้ เป็น 1 ในตัวละครที่สามารถปั่น DP ได้ไวที่สุด (ณ ปัจจุบันที่เขียนบทความยังไม่มีตัวธง 5 ดาวเข้าเกม) แต่ปัญหาคือต้องเปิดจากตู้เท่านั้น ทำให้ยากต่อการหามาใช้งานสำหรับสายฟรี แต่ถ้าได้มาก็ควรจะปั้นเมื่อมีโอกาส  ข้อเสียของเธอคือ block ได้ 1 ตัว และระหว่างใช้สกิลจะไม่สามารถ block ศัตรูได้ จำเป็นต้องใช้ในด่านที่ไม่ต้องรีบวางตัวละครมา block เพิ่มเติม: Elysium ตัวธง 5 ดาวเข้าเกมแล้วแต่ก็ยังมาแทนน้องธงไม่ได้อยู่ดี เพราะความปั้นยากของเขา Courier สำหรับตัวนี้ E1 ก็พอใช้งานได้แล้ว  หามาใช้ได้ง่าย และใช้ได้ยาว ๆ เป็น Vanguard สาย Defense ที่พลังป้องกันสูง ยังสามารถ block ศัตรูได้ 2 ตัว เหมาะกับใช้ในช่วงแรกของด่านที่ต้องมีตัวมา block ทางไม่ให้ศัตรูผ่านไปไ

[Arknights] แนะนำตัวละคร 1-3 ดาว สำหรับมือใหม่

รูปภาพ
Arknights ไกด์นี้ สำหรับผู้เล่นหน้าใหม่โดยเฉพาะที่มีตัวละครน้อย มีตัวละครจำกัด จะขอไล่ตั้งแต่ 1 ดาวไปจนถึง 3 ดาว และในแต่ละหัวข้อจะไล่ตั้งแต่ตัวละครที่จำเป็นสุดไปจนถึงตัวที่อาจจะไม่ปั้นก็ได้ ในบทความนี้ผมจะยกมาเฉพาะตัวที่ผมมีโอกาสได้ใช้และคิดว่าจะเป็นประโยชน์กับมือใหม่เท่านั้น แนะนำให้ลองหาไกด์อื่น ๆ ดูประกอบไปด้วยนะครับ ตัวละคร 1 ดาว Lancet-2 เป็นตัวละคร 1 ดาวที่ผมใช้อยู่ตัวเดียวเลย เป็นตัวละครที่ใช้แต้มในการ deploy เพียง 3 แต้ม และไม่สนค่า Unit limit ภายในด่านด้วย คือถ้าจำเป็นต้องมีตัวฮีลเพิ่มโดยไม่อยากจะเสียแต้มมากขึ้นนัก หรือต้องการฮีลแบบฉุกเฉินก็สามารถลงได้ทันที เมื่อลงสนามจะฮีลให้เพื่อนทุกคนในสนามสูงสุดที่ 500 HP เมื่อ Potential เต็ม (แต่ส่วนตัวเอามาแค่ฮีลในบางด่านที่ฮีลไม่พอใช้) ตัวละคร 2 ดาว 12F เป็นตัวเวทย์ที่โจมตีหมู่ตัวแรก ใช้แต้มในการ deploy ต่ำ ในช่วงด่านแรก ๆ ใช้งานได้ดี มี stat หลบหลีกกายภาพสูงอีกด้วย ใช้แก้ขัดได้จนถึงกลางเกม Rangers ตัวละคร Sniper ยิงไกลที่มาพร้อมกับความสามารถโจมตีเป้าหมายบิน(จำพวกโดรน)ได้แรงขึ้น 50%  เมื่อเล่นเนื้อเรื่องไปสักพักจะเริ่มมีด่านที่มีโดรนออ

[JavaScript] Arrow function expressions ใช้งานยังไง?

รูปภาพ
 Arrow function expressions คือการเขียน function ในรูปแบบอย่างย่อ ทำให้สะดวกในการเขียนมากขึ้น web browser ยุคใหม่ก็ support กันหมดแล้ว แต่จะเห็นว่าใช้แพร่หลายคือกับ node.js หรือกับ JavaScript framework ตัวใหม่ ๆ ซึ่งส่วนมากจะใช้กับ closure function แปลง function ปกติเป็น Arrow function // function แบบปกติทั่วไป function (a){ return a + 100; } // แปลงเป็น Arrow Function // 1. ลบ "function" และใส่ => เข้าไปแทนระหว่างวงเล็บของ argument และปักกาเปิด { (a) => { return a + 100; } // 2. ลบปีกกาและคำว่า "return" ออก (a) => a + 100; // 3. ลบวงเล็บของ argument ออก a => a + 100; ถ้า argument มีหลายตัว // Traditional Function function (a, b){ return a + b + 100; } // Arrow Function (a, b) => a + b + 100; // เอาวงเล็บ argument ออกไม่ได้ ถ้า function ไม่มี argument // Traditional Function (no arguments) let a = 4; let b = 2; function (){ return a + b + 100; } // Arrow Function (no arguments) let a = 4; let b = 2; () => a + b + 100; //ใ

[JavaScript] วิธีใช้ Spread syntax (...)

รูปภาพ
 Spread syntax คือการนำค่าของตัวแปรที่มีลักษณะเป็น collection ไม่ว่าจะ array หรือ object มาแจกแจงกระจายออกมาใช้งาน ซึ่งจะคนละอย่างกับ Rest syntax (แต่ใช้ ... เหมือนกัน) โดย Rest syntax จะเป็นการประกาศให้ function รับ argument กี่ตัวก็ได้ ซึ่งจะเขียนในบทความถัดไป Spread syntax จะมีการใช้งานหลัก ๆ อยู่ 3 รูปแบบดังนี้ ใช้ส่ง arguments ให้ function ยกตัวอย่าง function sum ตามภาพ รับ argument 3 ตัว เราสามารถโยน array ที่มีสมาชิก 3 ตัวด้วย Spread syntax เข้าไปใน function ได้เลย function sum(x, y, z) { return x + y + z; } let numbers = [1, 2, 3]; console.log(sum(...numbers)); // 6 และหากเรานำไปใช้กับ function ที่ประกาศด้วย Rest syntax จะมองเห็นความเจ๋งของ Spread syntax ได้ชัดขึ้น function sum(...theArgs) { //theArgs รับเข้ามาจะเป็น array return theArgs.reduce((previous, current) => { return previous + current; }); } let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log(sum(...numbers)); // 55 ใช้งานกับ array array ใน JavaScript จะมีความพิเศษอยู่อย่างหนึ่

PHP 8.0 มาแล้ว!!!

รูปภาพ
 บทความนี้จะเขียนเฉพาะหัวข้อที่ส่วนตัวคิดว่าเป็นสิ่งที่น่าสนใจสำหรับ PHP 8.0 จะไม่ครอบคลุมทั้งหมด แต่จะทิ้งลิงก์สำหรับข้อมูลตัวเต็มไว้ให้ท้ายบทความครับ Named arguments (ใช้ชื่อ argument ในการส่งค่าได้) ในตัวอย่างนี้ดูแล้วอาจจะงงสักหน่อย ต้องมาดูที่ว่า function นี้ถูกประกาศยังไง ใน feature นี้อธิบายง่าย ๆ คือเราสามารถ "เลือก" ที่จะส่ง argument ยังไงก็ได้หากมีการกำหนดชื่อของ argument ที่ส่ง ไม่จำเป็นต้องลำดับ argument ด้วย ในตัวอย่างของ PHP 8 จะเห็นว่าเขาเลือกส่ง $string (อันนี้ไม่ได้ใช้ Named argument ส่งแบบปกติ) และ double_encode (อันนี้มีการใช้ละ คือเลือกส่งเฉพาะ double_encode เป็น false) ส่วนตัวแปรที่เหลือปล่อยให้เป็นค่า default ไปตามใน doc ครับ Constructor property promotion (ประกาศ property ผ่าน constructor) feature นี้ตรงไปตรงมาตามภาพคือไม่จำเป็นต้องประกาศ property ด้านบนของ class แล้ว ประกาศผ่าน argument ของ constructor รวมถึง assign ค่าไปในตัวให้ด้วยเลยเมื่อส่งค่าเข้ามา Match expression ครั้งหนึ่งในชีวิต PHP programmer น่าจะมีคิดกันบ้างว่าทำไมต้องมาพิมพ์ break; หลาย ๆ

เว็บสำหรับคำนวณ stat เกม Freestyle 2

วิธีใช้งานเว็บ  Freestyle 2 Stat Calcuator กรอกแต้มที่มีในช่อง Training Point   (เวอร์ชั่นนี้จะไม่มีแบ่งว่าเป็นตัวละครพิเศษ หรือตัวละครเลเวลเท่าไหร่ ให้กรอกแต้มที่มีลงไปเลย) เลือกตำแหน่งของตัวละคร (Position) เลือกประเภทของตัวละคร (Type = Balanced, Power, Shrewd) จะมี stat ทั้งหมดแสดงขึ้นมาให้กด +, - เหมือนกับในเกมเพื่อทดลองอัพได้เลย ตรวจสอบแต้มที่คงเหลือจากหัวข้อ Available Point ถ้าติดลบจะนำไปใช้จริงไม่ได้ Link:  https://fs2statcal.vercel.app/