What does she do?

– Vocabulary: Occupations

an accountant (บัญชี)a company employ (พนักงานบริษัท)a flight attendant (พนักงานตอนรับบทเครื่องบิน)a receptionist (พนักงานต้อนรับ)
a server (พนักงานเสริฟ)a handyman (ช่างซ่อมบำรุง)a sales clerk (พนักงานขาย)a business owner (ธุรกิจส่วนตัว)
a dentist (หมอฟัน)an interpreter (ล่าม)a bank teller (พนักงานธนาคาร)a tour guide (มัคุเทศน์)

– Language Focus: Present Simple with WH

WH-word + do/does + subject + verb?

– “You and plural subject”

What do you do?I work as a sales clerk./ I am a sales clerk.
When do you work?I work from Monday-Friday.
I work from 10:00 a.m. to 6:00 p.m.
How do you go to work?I take a sky train to work
Where do your friends work?They work in Chidlorm.
What company do Mark and Rob work work for?They work for Star company.

– “Thirs person singular subject”

What does your sister do?My sister us a flight attendant.
My sister works as a flight attendant.
When does Jane work?Jane works from Wednesday to Sunday. She works from 11:00 a.m. to 7:00 p.m.
Why does Henry go to work?He takes the bus to work
Why does your friends want to be a doctor?My friend wants to help people.
What company does Paul work for?Paul works for Walts company.

– Practice: Make questions from the given answer.

  1. Q: Where does he work?
    A: Make works in the hospital in upcountry.
  2. Q: What company do your friends work for?
    A: My friends work for PP company.
  3. Q: How does your MOM go to work?
    A: My mother usually takes a taxi to work. She somethimes drives.
  4. Q: When do you work?
    A: I work on Tuesday, Friday, and Saturday from 10 a.m. to 7 p.m.
  5. Q: Why do you work as an interpreter?
    A: I’m an interpreter because I love to learn new languages and I can speak English and Japanese.

It’s pretty safe

– Vocabulary: Districts

downtown (ตัวเมือง)the suburbs (ชาญเมือง)a shopping district (ย่าน ช๊อปปิ้ง)
a college campus (วิทยาเขตวิทยาลัย)a recreational area (พื้นที่ สันธนาการ)a nighspot (สถานบันเทิงยามค่ำคืน)
countryside (ชนบท)a residential area (ย่านที่อยู่อาศัย)a tourist attraction (แหล่งท่องเที่ยว)

_ Language Focus: Quantifiers

Countable nounsUncountable nouns
Are there many restaurants?
– Yes, there are a lot.
– Yes, there are a few.
– No, there aren’t any.
Is there much crime?
– Yes, there’s a lot.
– Yes, there’s a little.
– No, there isn’t any.
How many restaurants are there?
– There are ten or twelve.
How much crime is there?
– There’s a lot of street crime.

– Practice: Translate the sentences into English.

  1. มีร้านอาหารหลายร้านแถวบ้านฉัน แต่มีโรงเรียนสองสามที่
    There are a lot of restaurants in my neighborhood but there are a few shools.
  2. แถวบ้านของฉันมีร้านกาแฟเยอะมากแต่ไม่มีร้านสะดวกซื้อเลย
    There are a lot of coffee shop in my neighborhood but there isn’t any convenience stores.
  3. แถวบ้านคุณมีสถานที่พักผ่อนหลายแห่งมั้ย
    Are there a lot of/many recreational areas in your neighborhood?
  4. แถวบ้านคุณมีเสียงดังมากมั้ย
    Is there mush noise in your neighborhood?
  5. แถวบ้านคุณมีที่เที่ยวกลางคืนกี่แห่ง
    Are there a lot of nightspot in your neighborhood?

I Always Hang Up My Clothes

– Vocabulary: Chores Phrasal verb

stock up the frige (ตุนของในตู้เย็น)cook up a meal (ปรุงอาหาร)pick up the magazines (เก็บนิตยสาร)sweep up the floor (กวาดพื้น)
clean up the yard (ทำความสะอาดพื้นที่)hang up the clothes (แขวนเสื้อผ้า)put away the dishes (เก็บจาน)wash up the dishes (ล้างจาน)
wipe off the counter (เช็คเคาร์เตอร์)clean out the cabinet (ทำความสพอาดตู้, เคลีย์ตู้)freshen up the room (ทำให้ห้องสดชื่น)take out the garbage (เก็บขยะ)

– Language Focus: Separable Phrasal Verb

– I take out the garbage.
– I take the garbage out.
– I take it out.
– Could you hang up your clothes?
– Could you hang your clothes up?
– Cloud you hang them up?
– I wash up the dishes.
– I wash the dishes up.
– I wash them up.
– You need to wipe off the counter.
– You need to wipe the conter off.
– You need to wipe it off.

– Practice: Complete the sentences with the correct verbs. Use “it” or “them”

clean outfreshen uppick uptake out
clean up hang upput awaywipe off
  1. A living room is a mess. Let ‘s clean it up before mon and dad come back.
  2. Why are your clothes on the chair? Can you hang them up in the closet?
  3. The garbage is full. Could you clean it out right away, please?
  4. This closet is full of old clothes and bage. Let’s put them away .
  5. The dishes are in the dishwasher. Would you take them out for me?
  6. This table isn’t clean. Can you wipe it off before dinner, please?
  7. Why is the house smell so bad? Could you freshen it up before the party?
  8. Your books and magazine are all over the floor. Would you pick them up, please?

Work and free time activities

– Vocabulary: daily routine

take a class (เข้าเรียน)attend a meeting (เข้าร่วมประชุม)sleep in (ตื่นสาย)make an appoinment (ทำการนัดหมาย)
follow up with work (ติดตามผลงาน)discuss work (คุยงาน)start work / finish work (เริ่มงาน /เสร็จงาน)leave home (ออกจากบ้าน)
go on social mediago grocery shopping (ไปซื้อของชำ)chill out (ชิล)cook a meal (ทำอาหาร)
arrive at work (มาถึงที่ทำงาน)catch up with work (ทำงานให้ทัน)stay up late (นอนดึก)do chores (ทำงานบ้าน)

– Language Focus: Talking about time and activities

– Asking and talking about time and activities

What time do you + (verb unfibitive) ?What time is + [noun]?
What time do you attend the meeting?What time is the meeting?
What time do you study English?What time is the class?

– Prepsition of time

InOnat
ใช้กับ ช่วงเวลา เดือน ฤดู หรือปีใช้กับ วันที่ และวันใช้กับ เวลา (ชม. / นาที)
I usually go abroad in January.I work out an Saturdays.I get up at 7 o’clock
The river is dry in summer.I get paid on the 20 every month.My English class starts at noon.

Rules of the workplace

– Vocabulary: Put pharses into the correct category.

arrive at work on time (มาทำงานตรงเวลา)smoke in the car park (สูบบุหรี่ที่จอดรถ)were casual clothes (ใส่เสื้อผ้าไม่เป็นทางการ)bring pet (เลี้ยงสัตว์)
use Facebook in working hours (ใช้งาน FB ในเวลาทำงาน)have a neat appearance (ดูลักษณะเรียบร้อย)got to work late (ไปทำงานสาย)gossip other co-workers (คุยเล่นกับเพื่อนร่วมงาน)
eat smelly food (กินอาหารที่เหม็น)talk quietly (คุยเงียบ ๆ)keep the table tidyknock the door (เคาะประตู)
keep a healthy relationship (รักษาความสัมพันธ์ที่ดี)chitchat on the phone (คุยนินทาในโทรศัพท์)offer help (ให้ความช่วยเหลือ)chew gum in a meeting (เคี้ยวหมากฝรั่งในห้องประชุม)

– Language Focus: Modal verbs for rules

Modal VerbsExamples
Can/ CannotYou can use your phone. / You can’t use your phone.
May/ May notYou may smoke in the car park. / You may not smoke in the car park.
Must / Must notYou must have a neat appearance. / You must not wear flip-flops to work.
be permitted / be not permittedYou are permitted to bring pet. / You are not permitted to bring pet.

– Asking abount rules and for permission

QuestionExample
Modals verbs + subject + V.1 ?Can I eat smelly food here?
Am I permitted to bring pet here?

– Practice: Translate the sentences into English.

  1. คุณห้ามใส่ชุดลำลองไปทำงาน [be not permitted]
  2. ทุกคนสามารถนำสัตว์มาเลี้ยงมาที่ทำงานได้ในวันศุกร์ [may]
  3. ฉันสามารถทานอาหารที่มีกลิ่นในนี้ได้ไหม [can]
  4. คุณห้ามเคี้ยวหมากฝรั่งในที่ประชุมเด็ดขาด [must]
  5. พนักงานสามารถเล่นเฟสบุค 2 ชั่วโมงในเวลาทำงานได้ [be permitted]

There’s a lot of light

– Vocabulary: Things around the house

wardrop (ตู้เสื้อผ้า)dining table (โต๊ะอาหาร)bathtub (อ่างอาบน้ำ)coffee table (โต๊ะกาแฟ)refrigerator (ตู้เย็น)
cupboard (ตู้เก็บของในครัว)lamp (โคมไฟ)shelves (ชั้นวางของ)parking space (พื้นที่จอดรถ)stove (เตา)
armchairs (เก้าอี้มือวาง)washing machine (เครื่องซักผ้า)picture frameworking table (โต๊ะทำงาน)curtains (ผ้าม่าน)

– Language Focus: There is/ There Are/ How Much/ How Many

– Are There/ Is There
Are There …?Is There …?
Are there any cupboard?
Yes, there are.
Is there a lot of space in your house?
Yes, there is.
Are there any picture frames in your house?Is there a lot of noise in your room?
No, there isn’t.
– How many/ How much …?
How many cupboard are there?How much light is there?
There are a lot of / some /a few cupboard.
There is one cupboard.
There is lot of / some / a little light.
There aren’t any cupboard.There isn’t any light.

Can you turn down the music

– Vocabulary: Every requests

lend me money (ให้ยืมเงิน)help me with my homework (ช่วยฉันทำการบ้าน)help me clean (ช่วยกันทำความสะอาด)get me coffee (ช่วยซื้อกาแฟให้ฉัน)
make me something to eat (ทำอะไรบ้างอย่างเพื่อกิน)drop me off (ไปส่งฉันที)sleep over (นอนค้าง)turn on the TV (เปิดทีวี)
pass me salt (ส่งเกลือให้ฉัน)turn down the music (หลี่เสียงrun an errandlook after my pet

– Language Focus: Making and responding to a request

Making a requestAgreeing to a requestDisagreeing to a request
Can you turn down the music, please?Sure, no problem.I’m afraid i can’t
Could you pass me salt, please?Sure, here you are.I’m sorry i can’t
Would you help me with my work please?I’d be happy to.I’m sorry. Idon’t know how to.
Do you think you could help me clean?Certainly, yes.I would love to but …
Do you mind lending me your phone, please?No, I don’t mind.I’m sorry but yes I do.

I would like to check in

– Vocabulary

a double room (ห้องนอนคู่ 1 เตียง)a family room (ห้องนอนแบบครอบครัว)a beach front room (ห้องนอนติดชายหาด)
a twin room (ห้องนอนเตียงเดียว 2 เตียง)a triple room (ห้องนอนเตียงเดียว ผสมคู่ เพื่อนอน 3 คน)a single room (ห้องนอนเตียงเดียว นอนคนเดียว)
an interconnection room (ห้องนอนที่มีทางเชื่อมถึงกัน)a suite (ห้องนอนแบบประตูเชื่อมถึงกัน มีพื้นที่ทำงาน)a duplex room (ห้องนอนแบบมีชั้นลอย)

– Language Focus: Useful Hotel Pharses

ReceptionistGuest
…[greeting]… welcome to …[hotel]…
How may i help you?
I’m checking in. The name is …
I would like to check in please. My name is …
May I see your ID, please?
May I have your passport, please?
Yes, here you are.
Of course, here you go.
That’s…[room]…for …[number]… nights?
Example: That’s a twin room for 2 nights.
That’s right.
I’m sorry. I booked for … [2 nights]…
May I have your credit card, please?
Do you have a credit card?
Yes, here you are.
Of course, here you go.
Could you fill out this form, please?
Could you sign here, please?
Yes, sure
Certainly
You room number is …. on the … floor.
You’re in room … on the … floor.
Would you like the bellboy to take your bags for you?
Thank you.

Flutter จัดการ flutter SDK versions ด้วย fvm (Flutter Version Management) EP3

เมื่อไม่กี่วันที่ผ่านมา ทาง google ได้ประกาศ flutter 2 เป็น stable version แล้ว ซึ่งจะสามารถ run ใช้งานที่ platform web ได้แบบสมบูรณ์ ทำให้นักพัฒนาเกิดความอยากได้อยากลองที่จะ upgrade flutter version จากเดิมเวอร์ชั่น 1.22.6 สุดท้าย ขยับไปเป็น 2.0.1 ซึ่งแน่นอนว่า โปรเจคเก่า ๆ ที่พัฒนาไว้แล้ว บางโปรเจคจะไม่สามารถรันที่ flutter version 2 ได้ (เวอร์ชัน 2 จะ deprecated บาง feature จะไม่สามรถทำงานได้ที่ เวอร์ชั่น 2)

สำหรับการที่จะทำการติดตั้ง flutter ทั้ง เวอร์ชัน 1 และ 2 ในเครื่องเดียว พร้อมทั้ง set FLUTTER_HOME เพื่อให้ editor ต่าง ๆ เช่น VSCode ,Android Studio ให้สามารถเข้าถึง path flutter ได้ ก็ไม่สะดวกในการที่จะใช้งาน

FVM (Flutter Version Management: A simple cli to manage Flutter SDK versions.)

cli ที่จะช่วยที่นักพัฒนาเลือกใช้ flutter sdk ได้สะดวก และง่ายยิ่งขึ้นด้วยการ สลับ sdk version ง่าย ๆ ใน command เดียว

คุณสมบัติของ FVM

  • กำหนดค่าและใช้เวอร์ชัน Flutter SDK ต่อโปรเจ็กต์
  • ความสามารถในการติดตั้งและแคช Flutter SDK หลายเวอร์ชัน
  • สลับระหว่างช่องและเวอร์ชันของ Flutter ได้อย่างรวดเร็ว
  • พาธ dynamic SDK สำหรับการสนับสนุนการดีบัก IDE
  • กำหนดค่าเวอร์ชัน FVM พร้อมโปรเจ็กต์เพื่อความสอดคล้องกันระหว่างทีมและสภาพแวดล้อม CI
  • ตั้งค่าเวอร์ชัน flutter sdk global ในโปรเจ็กต์ต่างๆ

ติดตั้ง FVM

  • ติดตั้งผ่าน pub (package manager for the Dart programming language)
$ pub global activate fvm

*** Window OS ให้ทำการ set environment PATH \Users\poolsawat\AppData\Local\Pub\Cache\bin เพื่อให้สามารถเรียก fvm cli แบบ global ได้

  • fvm help เช็ค options ต่างๆ
$ fvm help
Flutter Version Management: A cli to manage Flutter SDK versions.

Usage: fvm <command> [arguments]

Global options:
-h, --help       Print this usage information.
    --verbose    Print verbose output.

Available commands:
  config     Set configuration for FVM
  flutter    Proxies Flutter Commands
  install    Installs Flutter SDK Version
  list       Lists installed Flutter SDK Version
  releases   Lists Flutter SDK releases.
  remove     Removes Flutter SDK Version
  use        Which Flutter SDK Version you would like to use
  version    Prints the currently-installed version of FVM

Run "fvm help <command>" for more information about a command.
  • fvm list แสดงเวอร์ชัน flutter sdk ทั้งหมด
PS C:\WINDOWS\system32> fvm list
Versions path:  \Users\poolsawat\fvm\versions
2.0.1
1.22.6
  • fvm releases แสดง flutter sdk versions ที่สามารถ donwload มาใช้งานได้
$ fvm releases
Feb 27 18  │ v0.1.6
...
Jan 25 21  │ 1.22.6
Mar 3 21   │ 2.0.0
Mar 3 21   │ 2.0.0
Mar 3 21   │ 2.1.0-10.0.pre
Mar 4 21   │ 2.0.1
Mar 4 21   │ 2.0.1
--------------------------------------
Mar 12 21  │ 2.0.2             stable
--------------------------------------
--------------------------------------
Mar 13 21  │ 2.1.0-12.1.pre    dev
--------------------------------------
--------------------------------------
Mar 15 21  │ 2.0.2             beta
--------------------------------------
  • fvm install 2.0.2 ติดตั้ง flutter sdk เวอร์ชัน 2.0.2
$ fvm install 2.0.2
Installing version: 2.0.2
Cloning into '\Users\poolsawat\fvm\versions\2.0.2'...
remote: Enumerating objects: 286632, done.
remote: Total 286632 (delta 0), reused 0 (delta 0), pack-reused 286632
Receiving objects: 100% (286632/286632), 131.73 MiB | 9.98 MiB/s, done.
Resolving deltas: 100% (220826/220826), done.
Checking out files: 100% (5202/5202), done.
Version installed: 2.0.2
Checking Dart SDK version...
Downloading Dart SDK from Flutter engine ...
Building flutter tool...
Running pub upgrade...
Flutter 2.0.2 • channel unknown • unknown source
Framework • revision 8962f6dc68 (4 days ago) • 2021-03-11 13:22:20 -0800
Engine • revision 5d8bf811b3
Tools • Dart 2.12.1
  • fvm use 2.0.2 เลือกใช้งาน flutter sdk เวอร์ชัน 2.0.2
$ fvm use 2.0.2
Project now uses Flutter: 2.0.2
  • fvm remove 2.0.2 ลบ flutter sdk เวอร์ชัน 2.0.2
$ fvm remove 2.0.1
Removing 2.0.1
  • fvm config –cache-path D:\newpath\fvm\versions แก้ไข path cache ใหม่ กรณีจะย้ายจาก drive c ไป drive อื่น
$ fvm config --cache-path D:\newpath\fvm\versions
  • fvm flutter run เพื่อ รัน code ด้วย flutter sdk ที่เลือก
$ fvm flutter run

ตั้งค่าการใช้งานบน IDE VSCode

ให้เปิด settings.json (Ctrl + Shift + P)

"dart.flutterSdkPaths": [
     "/Users/poolsawat/fvm/versions"
]

Javascript Zero to Hero พื้นฐาน เครื่องหมายดำเนินการต่าง ๆ JS EP2

พาเข้าสู่เนื้อหาพื้นฐานที่ควรทราบ เพื่อที่จะเขียน javascript ได้อย่างไหล่ลื่น หลังจาก “Javascript Zero to Hero บทนำ EP1” แนะนำเครื่องมือและคำสั่ง javascript ไปบ้างแล้ว บทความนี้จะมาต่อเนื้อหาพื้นฐานของการเขียน javascript ส่วนที่เหลือสำหรับเริ่มต้นกันต่อครับ

Operators

เครื่องหมายดำเนินการกำหนดค่า และทางคณิตศาสตร์ (Assignment operators & Arithmetic Operators)

การกำหนดค่าให้กับตัวแปรด้วย operator equal (=)

let firstName = 'Asabeneh'
let country = 'Finland'

นอกจากเครื่องหมาย (=) ยังมีเครื่องหมายอื่น ๆ ที่ควรทราบ มาทำความรู้จักเพิ่มเติมกัน

เครื่องหมายตัวอย่างเทียบได้กับอธิบาย
=x = yx = yเก็บค่า y ใส่ตัวแปร x
+=x += yx = x + yนำ x บวก y เก็บใส่ตัวแปร x
-=x -= yx = x – yนำ x ลบ y เก็บใส่ตัวแปร x
*=x *= yx = x * yนำ x คูณ y เก็บใส่ตัวแปร x
/=x /= yx = x / yนำ x หาร y เก็บใส่ตัวแปร x
%=x %= yx = x % yนำ x มอด y เก็บใส่ตัวแปร x
**=x **= yx = x ** yนำ x ยกกำลัง y เก็บใส่ตัวแปร x
บวก (+), ลบ (-), คูณ (*), หาร (/), มอด หารใช้ค่าของเศษ (%), ยกกำลัง (**)

เครื่องหมายดำเนินการเปรียบเทียบค่า (Comparison Operators)

เครื่องหมายชื่อเครื่องหมายตัวอย่างอธิบาย
==ค่าเท่ากันx == yค่า x เท่ากับ y หรือไม่
!=ค่าไม่เท่ากันx != yค่า x ไม่เท่ากับ y หรือไม่
===ค่าเท่ากัน และชนิดเดียวกันx === yค่า x เท่ากับ y และ ชนิด x เหมือน ชนิด y หรือไม่
>ค่ามากกว่าx > yค่า x มากกว่า y หรือไม่
<ค่าน้อยกว่าx < yค่า x น้อยกว่า y หรือไม่
>=ค่ามากกว่าหรือเท่ากันx >= yค่า x มากกว่าหรือเท่ากับ y หรือไม่
<=ค่าน้อยกว่าหรือเท่ากันx <= yค่า x น้อยกว่าหรือเท่ากับ y หรือไม่

ตัวอย่างการนำไปใช้งาน

console.log(3 > 2)              // true, because 3 is greater than 2
console.log(3 >= 2)             // true, because 3 is greater than 2
console.log(3 < 2)              // false,  because 3 is greater than 2
console.log(2 < 3)              // true, because 2 is less than 3
console.log(2 <= 3)             // true, because 2 is less than 3
console.log(3 == 2)             // false, because 3 is not equal to 2
console.log(3 != 2)             // true, because 3 is not equal to 2
console.log(3 == '3')           // true, compare only value
console.log(3 === '3')          // false, compare both value and data type
console.log(3 !== '3')          // true, compare both value and data type
console.log(3 != 3)             // false, compare only value
console.log(3 !== 3)            // false, compare both value and data type
console.log(0 == false)         // true, equivalent
console.log(0 === false)        // false, not exactly the same
console.log(0 == '')            // true, equivalent
console.log(0 == ' ')           // true, equivalent
console.log(0 === '')           // false, not exactly the same
console.log(1 == true)          // true, equivalent
console.log(1 === true)         // false, not exactly the same
console.log(undefined == null)  // true
console.log(undefined === null) // false
console.log(NaN == NaN)         // false, not equal
console.log(NaN === NaN)        // false
console.log(typeof NaN)         // number

เครื่องหมายตรรกะ (Logical Operators)

ย้อนกลับไปในช่วงที่เรียนคณิตศาสตร์ สมัยประถม หรือมัธยมจะมีตารางตรรกะศาสตร์เบื้องต้น

ในภาษา javascript จะใช้สัญลักษณ์

  • && เพื่อแทนเงื่อนไข และ
  • || เพื่อแทนเงื่อนไข หรือ
  • ! เพื่อแทนนิเสธน์
เครื่องหมาย และ (&&)เครื่องหมาย หรือ (||)เครื่องหมาย นิเสธน์ (!)
4 > 3 && 10 > 5
true && true -> true
4 > 3 || 10 > 5
true || true -> true
!4 > 3
true -> false
4 > 3 && 10 < 5
true && false -> false
4 > 3 || 10 < 5
true || false -> true
!4 < 3
false -> true
4 < 3 && 10 > 5
false && true -> false
4 < 3 || 10 > 5
false || true -> true
!(!4 > 3)
true -> false -> true
4 < 3 && 10 < 5
false && false -> false
4 < 3 || 10 < 5
false || false -> false
!(!4 < 3)
false -> true -> false

เครื่องหมายเพิ่มค่า และลดค่า (Increment Operator & Decrement Operator)

การเพิ่มค่า

เพิ่มค่าล่วงหน้า

let count = 0
console.log(++count)        // 1
console.log(count)          // 1

เพิ่มค่าหลังจาก

let count = 0
console.log(count++)        // 0
console.log(count)          // 1

การลบค่า

ลบค่าล่วงหน้า

let count = 0
console.log(--count)        // 1
console.log(count)          // 1

ลบค่าหลังจาก

let count = 0
console.log(count--)        // 0
console.log(count)          // 1

เครื่องหมายดำเนินการ 3 อย่าง (Ternary Operators)

การเขียนเงื่อนไขแบบสั้นจะประกอบไปด้วย 3 อย่าง คือ 1. เงื่อนไข 2. ทำบางอย่างหากเงื่อนไขเป็นจริง 3.ทำบางอย่างหากเงื่อนไขไม่จริง อื่น ๆ

let isRaining = true
isRaining
  ? console.log('You need a rain coat.')
  : console.log('No need for a rain coat.')
isRaining = false

isRaining
  ? console.log('You need a rain coat.')
  : console.log('No need for a rain coat.')

Date Object

javascript จะมี object Date ให้ใช้งาน เหมือนภาษาอื่น ๆ สามารถระบุ รูปแบบวันที่ และดูค่าวันที่ วัน, เดือน, ปี, เวลา ได้

ชื่อ ฟังก์ชันอธิบายตัวอย่าง
getFullYear()คืนค่า ปี รูปแบบ YYYY2021
getMonth()คืนค่า เดือน รูปแบบ ลำดับเดือน ( 0 -11)0
getDate()คืนค่า วันที่ รูปแบบ ลำดับวัน ( 1 -31)1
getHours()คืนค่า เวลาหน่วย ชั่วโมง รูปแบบ ลำดับชั่วโมง ( 0 – 23)15
getMinutes()คืนค่า เวลาหน่วย นาที รูปแบบ ลำดับนาที ( 0 – 59)30
getSoconds()คืนค่า เวลาหน่วย วินาที รูปแบบ ลำดับวินาที ( 0 – 59)45
getMiliSeconds()คืนค่า เวลาหน่วย ลิลลิวินาที รูปแบบ ลำดับวินาที ( 0 – 999)489
getTime()คืนค่า เวลาหน่วย timestamp รูปแบบ ( 1 มกรา 1970 )1578092201341
getDay()คืนค่า สัปดาห์ รูปแบบ ลำดับสัปดาห์ ( 0 – 6) ( อาทิตย์ – เสาร์) 4

ตัวอย่างการเรียกใช้งาน Date

const now = new Date()
console.log(now) // Sat Jan 04 2020 00:56:41 GMT+0200 (Eastern European Standard Time)

// ดึงปี
const now = new Date() 
console.log(now.getFullYear()) // 2020

// ดึงเดือน
const now = new Date() 
console.log(now.getMonth()) // 0, because the month is January,  month(0-11)

// ดึงวันที่
const now = new Date() 
console.log(now.getDate()) // 4, because the day of the month is 4th,  day(1-31)

รูปแบบ Date อื่น ๆ

const now = new Date()
const year = now.getFullYear() // return year
const month = now.getMonth() + 1 // return month(0 - 11)
const date = now.getDate() // return date (1 - 31)
const hours = now.getHours() // return number (0 - 23)
const minutes = now.getMinutes() // return number (0 -59)

console.log(`${date}/${month}/${year} ${hours}:${minutes}`) // 4/1/2020 0:56

Flutter สร้าง Flutter Project แรก เริ่มต้นอย่างไร พร้อมทดสอบรันบน Emulator devices EP2

พาทุกคนมาเริ่มสร้าง Flutter Project แรกมีขั้นตอนอย่างไร บทความนี้จะพาทุกคนมาเริ่มทำการ create flutter starter project ที่ทาง flutter สร้างระบบ counter ง่าย ๆ มาให้ได้ลองเล่นกัน ด้วยเครื่องมือ VSCode ที่เป็นเครื่องมือที่กำลังได้รับความนิยมอยู่ในตอนนี้ มาเริ่มกันเลย

เริ่มสร้าง Counter Flutter Project ง่าย ๆ

  • เปิด Visual Studio Code
  • เปิด Command Pallette (Ctrl + Shift + P) และพิมพ์ “flutter ” เลือก “Flutter: New Application Project”
  • จะมีการให้เลือกที่เก็บ Project จากนั้น ระบบจะให้ตั้งชื่อ Project ก็ตั้งตามที่ต้องการ ตัวอย่างจะตั้ง “counter_app” รอสักครู่…
  • เปิด emulators ด้วยคำสั่ง “‘flutter emulators –launch <emulator id>” (<emulator id> คือ id emulator ที่เราสร้างไว้)
  • สั่งรันโค๊ดตัวอย่างที่ flutter มีให้ด้วยคำสั่ง “flutter run” หรือสั่ง run ผ่านไฟล์ lib/main.dart ด้วยปุ่ม Run

Flutter run key commands.
r Hot reload.
R Hot restart.
h Repeat this help message.
d Detach (terminate “flutter run” but leave application running).
c Clear the screen
q Quit (terminate the application on the device).
An Observatory debugger and profiler on sdk gphone x86 arm is available at: http://127.0.0.1:53236/Vgi_F0zG2PU=/

สรุปท้ายบทความ

ขั้นตอนต่าง ๆ จากบทความนี้เป็นการทดสอบสร้างบท environment ของผู้เขียนที่ได้ทำการตั้งค่า flutter sdk , dart sdk, android sdk เรียบร้อยแล้ว หากเพื่อน ๆ คนใดยังไม่ได้ติดตั้งโปรแกรม หรือไลบารี่เหล่านี้ให้ทำการติดตั้งให้เรียบร้อย จากบทความนี้นะครับ Flutter เริ่มต้น Setup Flutter เตรียมตัวก่อนเขียนโค๊ด EP1

Spring Boot แยก environments dev ,staging ,prod ด้วย spring profiles EP3

เมื่อการพัฒนาระบบ ได้มาถึงจุดที่ต้องทำการแยก environments ที่แตกต่างกัน จากตัวอย่างที่เห็นได้ชัด ๆ เช่น endpoint ของ API ที่ dev ก็จะใช้เป็น endpoint เพื่อสำหรับ dev เท่านั้น แต่เมื่ออยากที่จะ deploy เพื่อใช้งานบน production ก็จะมี endpoint ของ API เวอร์ชั่นที่เป็น ของ production จริงและความต้องการแบบนี้ สำหรับ project ที่ build ด้วย spring boot จะแก้ปัญหาได้อย่างไร มาทำความรู้จัก spring profiles กัน เพื่อช่วยให้ระบบสามารถแยก constant variables ตาม environment ต้องทำอย่างไร

ทดลองสร้าง Simple Project เพื่อพิสูจน์ความต้องการในครั้งนี้

โดยปกติ spring boot เมื่อสร้าง project ด้วย spring initialize เช็คโครงสร้าง project จะสังเกตุเห็นไฟล์ src/main/resources/application.properties ถ้าเราต้องการที่จะแยก environment dev , staging ,prod ก็ต้องจัดการไฟล์นี้ใหม่

  • เพิ่มไฟล์ตาม environment ที่ต้องการ ตัวอย่างข้างล่างนี้จะทำตัวอย่าง แยก dev ,prod เพื่อใช้เป็นตัวอย่างง่าย ๆ โดยจะทำการ copy file application.properties มาตั้งชื่อใหม่ให้เป็นตามแต่ละ environment แบบนี้
    • dev: src/main/resources/application-dev.properties
    • prod: src/main/resources/application-prod.properties
  • เพิ่มเติมเนื้อหาข้างในไฟล์ application-dev.properties และ application-prod.properties
#file application-dev.properties
server.port=8090
api.endpoint="dev.poolsawat.com"
#file application-prod.properties
server.port=9090
api.endpoint="prod.poolsawat.com"

โดยกำหนดให้

server.port ของ dev start ที่ port 8090 , prod start ที่ port 9090

api.endpoint ของ dev ใช้ endpoint ที่ “dev.poolsawat.com” , prod จะใช้ที่ “prod.poolsawat.com”

  • แก้ไขไฟล์ Application.java (ไฟล์ สำหรับใช้ boot SpringApplication.run(PoolsawatApplication.class, args); )
package com.poolsawat.starter;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class PoolsawatApplication implements CommandLineRunner{
	
	private static final Logger logger = LoggerFactory.getLogger(PoolsawatApplication.class);
	
	@Value("${api.endpoint}")
	private String apiEndpointUrl;
	
	@Value("${server.port}")
	private String serverPort;

	public static void main(String[] args) {
		SpringApplication.run(PoolsawatApplication.class, args);
	}
	
	@Override
	public void run(String... args) throws Exception {
		logger.info("server.port ::=="+serverPort);
		logger.info("api.endpoint ::=="+apiEndpointUrl);
		logger.info("spring boot loaded");
	}
	
}

เริ่มสั่ง start server ที่ env dev (ส่ง argrument -Dspring-boot.run.profiles=dev)

$ mvn -s D:/pool13433/programs/.m2/settings.xml spring-boot:run -Dspring-boot.run.profiles=dev
...
2021-03-08 13:29:35.407  INFO 12204 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-03-08 13:29:35.504  INFO 12204 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8090 (http) with context path ''
2021-03-08 13:29:35.512  INFO 12204 --- [           main] c.p.starter.PoolsawatApplication         : Started PoolsawatApplication in 1.253 seconds (JVM running for 1.518)
2021-03-08 13:29:35.514  INFO 12204 --- [           main] c.p.starter.PoolsawatApplication         : server.port ::==8090
2021-03-08 13:29:35.514  INFO 12204 --- [           main] c.p.starter.PoolsawatApplication         : api.endpoint ::=="dev.poolsawat.com"
2021-03-08 13:29:35.514  INFO 12204 --- [           main] c.p.starter.PoolsawatApplication         : spring boot loaded

เริ่มสั่ง start server ที่ env prod (ส่ง argrument -Dspring.profiles.active=prod)

  • pack jar ด้วย mvn install
  • exc jar
$ mvn -s D:/pool13433/programs/.m2/settings.xml install -Dmaven.test.skip=true
...
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ poolsawat ---
[INFO] Installing D:\pool13433\aging\workspace\Poolsawat.Com\target\poolsawat.jar to D:\pool13433\programs\.m2\repository\com\poolsawat\poolsawat\0.0.1-SNAPSHOT\poolsawat-0.0.1-SNAPSHOT.jar
[INFO] Installing D:\pool13433\aging\workspace\Poolsawat.Com\pom.xml to D:\pool13433\programs\.m2\repository\com\poolsawat\poolsawat\0.0.1-SNAPSHOT\poolsawat-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
$ java -jar -Dspring.profiles.active=prod ./target/poolsawat.jar
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.4.3)

2021-03-08 13:33:49.548  INFO 7448 --- [           main] c.p.starter.PoolsawatApplication         : Starting PoolsawatApplication v0.0.1-SNAPSHOT using Java 1.8.0_281 on LAPTOP-69PUN6C7 with PID 7448 (D:\pool13433\aging\workspace\Poolsawat.Com\target\poolsawat.jar started by pool13433 in D:\pool13433\aging\workspace\Poolsawat.Com)
2021-03-08 13:33:49.550  INFO 7448 --- [           main] c.p.starter.PoolsawatApplication         : The following profiles are active: prod
2021-03-08 13:33:50.698  INFO 7448 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 9090 (http)
2021-03-08 13:33:50.716  INFO 7448 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-03-08 13:33:50.717  INFO 7448 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.43]
2021-03-08 13:33:50.807  INFO 7448 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-03-08 13:33:50.807  INFO 7448 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1191 ms
2021-03-08 13:33:50.993  INFO 7448 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-03-08 13:33:51.156  INFO 7448 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9090 (http) with context path ''
2021-03-08 13:33:51.167  INFO 7448 --- [           main] c.p.starter.PoolsawatApplication         : Started PoolsawatApplication in 2.062 seconds (JVM running for 2.484)
2021-03-08 13:33:51.168  INFO 7448 --- [           main] c.p.starter.PoolsawatApplication         : server.port ::==9090
2021-03-08 13:33:51.169  INFO 7448 --- [           main] c.p.starter.PoolsawatApplication         : api.endpoint ::=="prod.poolsawat.com"
2021-03-08 13:33:51.169  INFO 7448 --- [           main] c.p.starter.PoolsawatApplication         : spring boot loaded

สรุปท้ายบทความ

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

Github code

Flutter เริ่มต้น Setup Flutter เตรียมตัวก่อนเขียนโค๊ด EP1

บทความแรกนี้ สำหรับผู้เริ่มต้นอยกาที่จะเขียน Flutter โดยที่จะแนะนำการเตรียมความพร้อมของเครื่อง เช่น Android Studio , Emulators ,Dart SDK , Flutter SDK , VSCode เป็นต้น โดยเนื้อหาสำหรับบทความนี้จะพา setup บน Window OS (Win 10) ฉะนั้นตัวอย่างบางขั้นตอน Mac OS อาจจะทำไม่ได้

ขออภัยสำหรับผู้ที่เข้ามาอ่าน แต่ใช้งาน Mac ไว้ ณ ที่นี้

ดาวน์โหลดไฟล์ที่ต้องใช้ และติดตั้ง

  1. ดาวน์โหลดไฟล์ที่ต้องใช้ และติดตั้ง
    1. Flutter SDK ดาวน์โหลด จะได้ไฟล์ flutter.zip ให้ unzip flutter.zip (copy path ไว้ต้องใช้ในขั้นตอน set android studio config) set environment variables ทำตามขั้นตอน ข่างล่าง
      1. เปิด search ของ window (มุมล่างขวา แว่นขยาย) พิมพ์ ‘env’ กดที่ “Edit Environment Variables for your account”
      2. เลือก “Advance System Setting” (สังเกตุเมนูลำดับที่ 4 ทางซ้ายมือของหน้าจอ)
      3. เลือก “Environment Variables…” (จะอยู่ล่าง ๆ ของหน้าจอ)
      4. จะมีให้ใส่ 2 แบบ คือ Variables for user , Variables for system จะเลือกทำที่ไหนก็ได้ขั้นตอนเหมือนกัน
        1. มองหา Variable Name ที่ชื่อว่า Path จากนั้นให้กดเลือก และกด Edit
        2. กด New เพื่อสร้าง เพิ่ม Flutter Environment เข้าไปใน Path (*ให้ระบุ path flutter/bin เช่น D:\dev\programs\flutter\bin) จากนั้นกด OK
      5. ทดสอบว่า command flutter สามารถเรียกใช้งานผ่าน command line ได้หรือยัง
        1. เปิด search พิมพ์ cmd เลือก “Command Promt” ให้พิมพ์ไปใน command ว่า “flutter doctor” ถ้ามีการแสดงข้อความ “
          “Doctor summary (to see all details, run flutter doctor -v): … ” แสดงว่า flutter พร้อมใช้งานแล้ว
  2. Android Studio ติดตั้ง ทำตามขั้นตอนการ
    • ตรวจสอบ Adnroid SDK ปกติขั้นตอนการติดตั้งระบบให้ให้ download Android SDK ในขณะการติดตั้ง (อาจจะใช้เวลาดาวน์โหลด ตามความเร็ว internet ของแต่ละคน) แนะนำให้เลือกย้ายไฟล์ android sdk ไปที่ directory ที่มีขนาดพอสมควร เพราะไฟล์มี android sdk มีขนาดใหญ่
      • Files -> Settings -> Appearance & Behavior -> System Setting -> Android SDK -> Android SDK Location: {แก้เป็น Path SDK ที่ย้าย}

3. ติดตั้ง plugins flutter ,dart บน android studio

  • เข้าไฟที่ File -> Settings -> Plugins -> Maketplaces
  • ค้นหา flutter ติดตั้ง
  • ค้นหา dart ติดตั้ง

4. ตรวจสอบการตั้งค่าของ flutter ด้วย $flutter doctor -v

$flutter doctor -v
Downloading Material fonts...                                    1,373ms
Downloading Gradle Wrapper...                                       72ms
Downloading package sky_engine...                                  350ms
Downloading flutter_patched_sdk tools...                            3.7s
Downloading flutter_patched_sdk_product tools...                    3.4s
Downloading windows-x64 tools...                                    6.1s
Downloading windows-x64/font-subset tools...                       672ms
[√] Flutter (Channel dev, 1.27.0-8.0.pre, on Microsoft Windows [Version 10.0.19041.804], locale en-US)
    • Flutter version 1.27.0-8.0.pre at D:\dev\programs\flutter
    • Framework revision b7d4806243 (5 days ago), 2021-02-19 09:22:45 -0800
    • Engine revision 6993cb229b
    • Dart version 2.13.0 (build 2.13.0-30.0.dev)

[√] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at D:\dev\programs\Android\Sdk
    • Platform android-30, build-tools 30.0.3
    • ANDROID_HOME = D:\dev\programs\Android\Sdk
    • ANDROID_SDK_ROOT = D:\dev\programs\Android\Sdk
    • Java binary at: D:\dev\programs\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

[√] Android Studio (version 4.1.0)
    • Android Studio at D:\dev\programs\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[√] IntelliJ IDEA Community Edition (version 2020.3)
    • IntelliJ at D:\dev\programs\IntelliJ
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart

[√] VS Code, 64-bit edition (version 1.53.2)
    • VS Code at C:\Program Files\Microsoft VS Code
    • Flutter extension version 3.19.0

[√] Connected device (2 available)
    • Chrome (web) • chrome • web-javascript • Google Chrome 88.0.4324.190
    • Edge (web)   • edge   • web-javascript • Microsoft Edge 88.0.705.74

• No issues found!

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

สร้าง API ด้วย App Script ดึงข้อมูลบน Google Sheets

บทความแนะนำการสร้าง RESTFul API โดยที่จะใช้การเก็บข้อมูลบน Google Sheets ที่ทุกคนคุณเคย แค่มี gmail account ก็สามารถสร้าง API ได้แล้ว บวกกับความรู้เรื่องการเขียน javascript พื้นฐาน เข้าใจพื้นฐานเรื่องการพัฒนาเว็บ (API) น่าจะเพียงพอในการทำ API ในบทความนี้ได้แล้ว

สร้าง Google Sheets เพื่อเป็น ฐานข้อมูล

บางท่านอาจจะไม่ทราบว่า google sheets ที่ทำหน้าที่คล้าย microsoft excel จะสามารถเขียนโปรแกรม อ่าน เขียน ข้อมูลในไฟล์ได้ ข้อดีคือไม่ว่าใครก็สามารถนำข้อมูลในไฟล์ google sheets ไปใช้งานต่อได้โดยไม่ต้องเขียน query เหมือนฐานข้อมูลแบบปกติ

  1. ให้สร้างไฟล์ google sheets ขอตั้งชื่อว่า “poolsawat.com” ชื่อไม่สำคัญ โปรแกรมจะ refer กับ sheetId ฉะนั้นชื่อจะตั้งเป็นอะไรก็ได้
  2. สร้างคอลัมน์ที่มีชื่อตามนี้ (ภาษาอังกฤษ เท่านั้น) id ,topic ,content ,author ,date ,view
  3. สำหรับข้อมูลให้ใส่ตามใจเลย

4. เริ่มเขียนโปรแกรมเลือกที่ เครื่องมือ (tools) -> โปรแกรมแก้ไขสคริป (Script editor)

5. ได้หน้า AppScript Editor เพื่อใช้เขียนโปรแกรมให้แก้ไข ตามนี้

function doGet(request) {
  // sheet id 
  var ss = SpreadsheetApp.openById("ใส่ sheet id ของคุณ");
  var sheet = ss.getActiveSheet()

  const values = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
  // Converts data rows in json format
  const result = values.map(([a, b, c , d , e , f]) => {
    return ({ id: a, topic: b, content: c, author : d , date : e , view : f})
  })
  return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);
}

openById : ให้ระบุ sheet id ที่ได้จาก https://docs.google.com/spreadsheets/d/187hL4DXXXXXXXXXXXXXXXXXXXXXXX-p_JOGjYxU/edit#gid=0 ซึ่งของแต่ละ sheet จะไม่ซ้ำกัน

6.กด “บันทึกโครงการ” script editor จากนั้นกด “เรียกใช้” ระบบขออนุญาตการบัญชีเจ้าของข้อมูล ก็ให้เลือกบัญชีเรา

7. ทำการเริ่มทดสอบ API

8. คัดลอกเว็บแอป URL ไปวางที่ browser ได้เลย

หลัก ๆ ขั้นตอนก็ประมาณนี้ ศึกษาเพิ่มเติมได้ที่นี้ Google App Script

Javascript Zero to Hero บทนำ EP1

javascript มีอายุของภาษาก็ 25 ปีแล้ว ถือว่าเป็นภาษาที่ได้รับความนิยมมายาวนาน ด้วยความสามารถที่เขียนไครเอนซ์ไซน์ (client side) และเซอร์เวอร์ไซต์ (server side) ทำให้ตัวภาษารับความนิยม จึงทำให้บริษัทเจ้าใหญ่ๆ ตั้งทีมงานเพื่อมาพัฒนา framework เพื่อเป็นกรอบการทำงานของการพัฒนาแอพพลิเคชั่น (application) ที่เป็นมาตรฐานที่เป็น standard แบบเดียวกัน เช่น React (facebook) , Angular (google) ,Vue (Evan U) เป็นต้น สิ่งที่มีเหมือนกันของแต่ละ framework คือ fundamental ของตัวภาษา javascript เอง ชุดบทความนี้จะพาทำความรู้จักภาษา javascript ตั้งแต่เริ่ม zero จนกระทั่งถึง hero คือสามารถนำไปใช้งานและพัฒนาแอพพลิเคชั่นได้อย่างดีแน่นอน

ทำความรู้จักเครื่องมือ สิ่งที่ช่วยให้การเริ่มเขียน Javascript น่าสนุกมากยิ่งขึ้น

เครื่องมือที่เป็นเหมือนสิ่งที่แปล หรือแปลงโค๊ดของภาษา javascript มากกว่าให้สามารถทำงานได้มีหลัก ๆ อยู้ด้วยกัน 2 การคอมไพล์ (compile) ผ่านเครื่องมือเหล่านี้

  1. NodeJS Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.
  2. Browser ต่าง ๆ ที่จะทำหน้าที่มี javascript runtime engine มาให้อยู่แล้ว เช่น Firefox , Safari ,Chrome แนะนำใช้งาน Google Chrome เพราะจะอัพเกรด version Javascript Engine ก่อน browser อื่น ๆ

console.log คืออะไร

เริ่มต้นก่อนที่จะพาไปรู้จักส่วนอื่น ๆ ในขั้นถัดๆ ไป ที่เรียกว่าขาดไม่ได้เลยคือการที่จะ debug หรือการที่จะแสดงผลลัพธ์ของตัวแปรที่เก็บอยู่ในโค๊ด การเรียกใช้งานคำสั่ง console.log(‘message or variable’)

console.log('Hello', 'World', '!')
console.log('HAPPY', 'NEW', 'YEAR', 2020)
console.log('Welcome', 'to', 'Zero', 'to', 'Hero')

การคอมเม้นท์ (comment)

การคอมเม้นท์ (comment code) คือการแทรกข้อความ หรืออื่น ๆ ที่ต้องการใส่ลงไปในไฟล์ของ โค๊ด javascript ที่ไม่ต้องการที่จะให้ javascript compile โค๊ดในส่งนี้เข้าไปในการทำงานของโปรแกรม จะไม่มีผลต่อการทำงานของโปรแกรม เพียงแต่จะมี text ข้อความแทรกอยู่ในไฟล์เท่านั้นเอง

ตัวอย่างการคอมเม้นท์ 1 บรรทัด
// This is the first comment
// This is the second comment
// I am a single line comment

ตัวอย่างการคอมเม้นท์ หลายบรรทัด
/_ This is a multiline comment
Multiline comments can take multiple lines
JavaScript is the language of the web
_/

การใช้เครื่องหมายดำเนินการทางคณิตศาสตร์

console.log(2 + 3) // Addition
console.log(3 - 2) // Subtraction
console.log(2 * 3) // Multiplication
console.log(3 / 2) // Division
console.log(3 % 2) // Modulus - finding remainder
console.log(3 ** 2) // Exponentiation 3 ** 2 == 3 * 3

แนวทางการเขียน Javascript Code ต่าง ๆ บนหน้าเว็บ

แนวทางการเขียนโค๊ด javascript กับหน้าเว็บไซต์ในรูปแบบต่าง ๆ หลัก ๆ มีด้วยกัน 4 แนวทางคือ

  • inline script การแทรก javascript ใน tag html เป็นการเขียนที่ง่ายที่สุด ตัวอย่าง
<!DOCTYPE html>
<html>
  <head>
    <title>Javascript Zero to Hero:Inline Script</title>
  </head>
  <body>
    <button onclick="alert('Welcome to Javascript Zero to Hero!')">Click Me</button>
  </body>
</html>
  • internal script การเขียนแทรก javascript code ในไฟล์ html โดยคำสั่งต่าง ๆ จะถูกเขียนอยู่ใน tag <script> </script>
<!DOCTYPE html>
<html>
  <head>
    <title>Javascript Zero to Hero:Internal Script</title>
    <script>
      console.log('Welcome to Javascript Zero to Hero')
    </script>
  </head>
  <body></body>
</html>
  • external script การเขียนโค๊ด javascript แยกเป็นอีก 1 ไฟล์ (นามสกุล .js) จากนั้นเรียกใช้งานเข้ามาในไฟล์ html ด้วยคำสั่ง <script src=”?”/>
    index.js
console.log('Welcome to Javascript Zero to Hero')

index.html

<!DOCTYPE html>
<html>
  <head>
    <title>Javascript Zero to Hero:External script</title>
    <script src="index.js"></script>
  </head>
  <body></body>
</html>

Javascript Data Type ต่าง ๆ

ในภาษา javascript จะเรียกเป็นรูปแบบ Dynamic Type ความหมายคือเป็นการกำหนด type ที่สามารถเปลี่ยนได้ตลอดเวลา โดยมีการกำนด type อยู่ด้วยกันหลัก ๆ ตามนี้ String, Number, Boolean, undefined, Null, and Symbol.

String

'Poolsawat'
'Apin'
'Javascript Zero to Hero'

Number

Integers: Integer (negative, zero and positive) numbers Example: ... -3, -2, -1, 0, 1, 2, 3 ...
Float-point numbers: Decimal number Example ... -3.5, -2.25, -1.0, 0.0, 1.1, 2.2, 3.5 ...

Boolean

True/true , False/false

Undefined

let name;
console.log(name) // undefined

Null

let emptyValue = null

การตรวจสอบประเภท หรือชนิดของตัวแปร

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

console.log(typeof 'Poolsawat') // string
console.log(typeof 5) // number
console.log(typeof true) // boolean
console.log(typeof null) // object type
console.log(typeof undefined) // undefined

การประกาศตัวแปร และการกำหนดขอบเขตของการเข้าถึง

ภาษา javascript จะมีการกำหนดประเภทตัวแปร โดยมีอยู่ด้วยกัน 3 รูปแบบ คือ

Var การกำหนดประเภทตัวแปรที่เป็นระดับ global ที่จาก function หรือ condition ไหน ๆ ก็สามารถเข้าถึงได้สามารถ assign value ได้

var name = 'Poolsawat' , lname = 'Apin'
var age = 99
var isMale = true

Const การกำหนดประเภทตัวแปรที่จะคล้ายกับ Var แต่จะไม่สามารถ assign value ใหม่ให้ได้ แต่จะมี scope ที่แคบกว่า var

const name = 'Poolsawat' , lname = 'Apin'
const age = 99
const isMale = true

Let การกำหนดประเภทข้อมูลในระดับที่แคบมาก ๆ สามารถ assign value ใหม่ได้ สามารถกำหนดชื่อซ้ำกันได้ แต่อยู่คนละ statement code ได้

let name = 'Poolsawat' , lname = 'Apin'
let age = 99
let isMale = true
if (age == 99 ){
    isMale = false
}

สรุปท้ายบทความ

จากบทความนี้จะเป็นการปูพื้นฐานก่อนเริ่มการเขียน javascript ในบทถัด ๆ ไปสิ่งเหล่านี้จำเป็นต้องจดจำและฝึกฝนเขียนให้จำได้ เพราะในบทความต่อ ๆ ไปจะเจอคำสั่งหรือเรื่องจากบทความนี้เยอะมาก สำหรับการทดสอบเรียกคำสั่งแบบง่ายที่สุด เพียงแต่เปิด browser chrome กด F12 เลือกไปที่ tab console จากนั้นพิมพ์ console.log(‘message ‘); กด enter ผลลัพธ์ก็จะแสดงทันที บทความถัดไปจะมาอธิบายเกี่ยวกับเรื่องอะไรคอยติดตามกันด้วยนะครับ