From e065719b4c365814143edae9e19f0acecf87934d Mon Sep 17 00:00:00 2001 From: Worajedt Sitthidumrong Date: Tue, 16 Jul 2019 19:58:47 +0700 Subject: translate Pascal to Thai language --- th-th/pascal.th.html.markdown | 227 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 th-th/pascal.th.html.markdown (limited to 'th-th') diff --git a/th-th/pascal.th.html.markdown b/th-th/pascal.th.html.markdown new file mode 100644 index 00000000..4fe0c4ac --- /dev/null +++ b/th-th/pascal.th.html.markdown @@ -0,0 +1,227 @@ +--- +language: Pascal +filename: learnpascal.pas +contributors: + - ["Ganesha Danu", "http://github.com/blinfoldking"] + - ["Keith Miyake", "https://github.com/kaymmm"] + - ["Worajedt Sitthidumrong", "https://bitbucket.org/wrj"] +lang: th-th +--- + +Pascal (ปาสกาล) เป็นภาษาโปรแกรมมิ่งทั้งแบบ imperative และ procedural ที่ออกแบบโดย Niklaus Wirth (นิเคล้า เวิร์ท) เมื่อปี 1968-69 และเผยแพร่ตอน 1970 โดยเน้นให้เป็นภาษาที่เล็ก มีประสิทธิภาพ เพื่อเสริมการเขียนโปรแกรมที่มีแนวปฏิบัติที่ดีด้วยการใช้โครงสร้างของตัวภาษา และโครงสร้างข้อมูลมากำกับ ชื่อของภาษานี้ตั้งเป็นเกียรติให้กับนักคณิตศาสตร์ชาวฝรั่งเศส, นักปรัชญา และนักฟิสิกส์ ชื่อ Blaise Pascal (เบลส ปาสกาล) ข้อมูลจาก : [วิกิพีเดีย][1] + +การคอมไพล์และรันโค้ดภาษาปาสกาลนี้ สามารถใช้ปาสกาลคอมไพลเลอร์ฟรีชื่อ Free Pascal ได้ โดย [ดาวน์โหลดที่นี่][2] + +ด้านล่างจะเป็นโครงสร้างภาษาหลัก ๆ ที่ต้องเข้าใจก่อน ปาสกาลจะเป็นภาษาที่เข้มงวดกับโครงสร้างโค้ดมาก + +```pascal +//โปรแกรมปาสกาล +//คอมเม้นต์เขียนแบบนี้ ใช้สแลชสองครั้ง +{ + แต่ถ้าต้องการคอมเม้นหลาย ๆ บรรทัด + ให้ใช้ วงเล็บปีกกา (curly brackets) + เนื้อหาอยู่บรรทัดเดียวกันกับปีกกาได้ +} + +//อย่างแรก ต้องประกาศ ชื่อโปรแกรม +program learn_pascal; //<-- ห้ามลืม semicolon + +const + { + ประกาศค่าคงที่ (constant) ในบล็อคนี้ + } +type + { + ประกาศชนิดข้อมูลของเราเองที่นี่ ไม่ว่าจะเป็น ชนิดข้อมูลทั่วไป + หรือจะเป็นคลาส + } +var + { + ตัวแปร ในภาษาปาสกาล ไม่เหมือนกับภาษาอื่น ๆ เพราะต้องประกาศในบล็อค var ก่อนใช้งานเสมอ + } + +//มาถึงส่วนโปรแกรมหลัก หรือ main fucntion นั่นเอง +begin + { + โค้ดเราทำงานอะไร อย่างไร ก็เริ่มรันจากตรงนี้ + } +end. // จบการทำงานของ _โปรแกรม_ เราจะจบด้วย จุลภาค "." +``` + +โค้ดต่อจากนี้ จะเป็นการอธิบายประกาศตัวแปรของปาสกาล + +```pascal +//การประกาศตัวแปร ทำได้แบบนี้ +//var ชื่อตัวแปร : ชนิด ; +var a:integer; +var b:integer; + +//หรือแบบที่นิยมมากกว่า คือเอามาเก็บในบล็อค var ทั้งหมด +var + a : integer; + b : integer; + +//ถ้าจะเอาแบบสั้น ๆ บรรทัดเดียว ก็ทำได้ ทำได้พร้อมกันหลาย ๆ ตัวแปรด้วย +var a,b : integer; +``` + +โค้ดตัวอย่างนี้เป็นโปรแกรม Learn_More ที่เป็นโครงสร้างโปรแกรมง่าย ๆ ที่จบสมบูรณ์หนึ่งโปรแกรม มีบล็อค program, const, type, main (Begin..End.) + +```pascal +program Learn_More; +// มาต่อเรื่อง ชนิดของข้อมูล (data types) และ ตัวดำเนินการ (operators) + +const + PI = 3.141592654; + GNU = 'GNU''s Not Unix'; + // ค่าคงที่ ให้ตั้งชื่อเป็น ตัวพิมพ์ใหญ่ ทั้งหมด ใช้กับชนิดข้อมูลใดๆ ก็ได้ + // ค่าคงที่ ก็ตามชื่อเลย กำหนดค่าแล้ว ไม่สามารถเปลี่ยนแปลงได้ขณะรัน + +// การประกาศชนิดข้อมูลของเราเอง : ชนิดของตัวแปรสองแบบนี้ จะนำไปใช้ด้านล่าง +type + ch_array : array [0..255] of char; + // อะเรย์ เป็นชนิดข้อมูลอีกแบบ ที่มี ความยาว/ช่องเก็บข้อมูล และ ชนิดข้อมูล + // โค้ดด้านบน เป็นการประกาศอะเรย์ของตัวอักษา 255 ตัวอักษา + // ซึ่งได้ ความยาว/ช่องเก็บข้อมูลในตัวแปรตัวนี้ 256 ช่องที่เป็นข้อความ + md_array : array of array of integer; + // ด้านบนนี้ เป็นตัวอย่าง อะเรย์สองมิติของเลขจำนวนเต็ม + // อะเรย์ ยังซ้อนกับอะเรย์ได้อีกด้วย ทำให้สร้าง อะเรย์หลายมิติได้ + // เรายังสามารถสร้าง อะเรย์ที่มีความยาวช่องเท่ากับศูนย์ (0) ได้อีกด้วย + // ซึ่งทำให้เกิด อะเรย์ที่จำนวนช่องยืดหยุ่นได้ (dymaically sized array) + +// การประกาศตัวแปร : ชื่อตัวแปรเหล่านี้จะนำไปใช้ด้านล่างต่อไป +var + int, c, d : integer; + // ประกาศในบล็อค var มีตัวแปรสามตัวเป็นอินทีเจอร์ + // ชนิดจำนวนเต็ม แบบ 16 bit มีช่วงข้อมูล [-32,768.. 32,767] + // »int« ในที่นี้เป็น "ชื่อตัวแปร" ที่ต้นฉบับตั้งให้สอดคล้องกับชนิดข้อมูล + // อย่าสับสนกับบางภาษาที่มีชนิด int ประกาศหน้าชื่อตัวแปร + r : real; + // ตัวแปร r เป็นชนิดเรียล (real) หรือเลขทศนิยม + // real มีช่วงข้อมูล [3.4E-38..3.4E38] + bool : boolean; + // ข้อมูลชนิดบูเลียน (boolean) มีค่าได้สองแบบ คือ True/False + ch : char; + // ตัวแปร ch เป็นชนิดตัวอักษร (ชาร์? คาร์?) หรือคาแรกเตอร์ + // ตัวอักษรเป็นแบบ ASCII 8 bit ดังนั้นจะไม่ใช่ UTF, Unicode + str : string; + // ตัวแปรสตริงจะเก็บข้อความ หรือ char หลาย ๆ ตัว + // ชนิดข้อมูลนี้ไม่เป็นมาตรฐานภาษาแต่แทบทุกคอมไพเลอร์ปาสกาลก็จะมีให้ + // ทั่ว ๆ ไปแล้ว จะเป็นอะเรย์ของ char ความยาวตั้งต้น 255 + s : string[50]; + // แบบนี้คือ กำหนดความยาว string เอง ให้เก็บ char 50 ตัว + // แบบนี้ก็ทำให้ประหยัดหน่วยความจำมากขึ้นนั่นเอง + my_str: ch_array; + // ชนิดตัวแปร ใช้เป็นชนิดที่เรากำหนดเองก็ได้ อย่างตอนนี้ + // ch_array เป็น "ชนิดข้อมูล" ที่เราสร้างขึ้นมาเอง ด้านบนที่บล็อค type + my_2d : md_array; + // ตัวแปรแบบอะเรย์ที่ไม่ประกาศขนาด (dynamically sized array) + // ก่อนเอาไปใช้จริงต้องระบุขนาดก่อนใช้เสมอ + + // ชนิดข้อมูลแบบ integer เพิ่มเติม + b : byte; // มีช่วงข้อมูล [0..255] + shi : shortint; // มีช่วงข้อมูล [-128..127] + smi : smallint; // มีช่วงข้อมูล [-32,768..32,767] (standard Integer) + w : word; // มีช่วงข้อมูล [0..65,535] + li : longint; // มีช่วงข้อมูล [-2,147,483,648..2,147,483,647] + lw : longword; // มีช่วงข้อมูล [0..4,294,967,295] + c : cardinal; // ก็คือ longword + i64 : int64; // มีช่วงข้อมูล [-9223372036854775808..9223372036854775807] + qw : qword; // มีช่วงข้อมูล [0..18,446,744,073,709,551,615] + + // ชนิดข้อมูลแบบ real เพิ่มเติม + rr : real; // มีช่วงข้อมูลที่ขึ้นกับระบบปฏิบัติการ (เช่นเป็นแบบ 8-bit, 16-bit, ฯลฯ) + rs : single; // มีช่วงข้อมูล [1.5E-45..3.4E38] + rd : double; // มีช่วงข้อมูล [5.0E-324 .. 1.7E308] + re : extended; // มีช่วงข้อมูล [1.9E-4932..1.1E4932] + rc : comp; // มีช่วงข้อมูล [-2E64+1 .. 2E63-1] + +Begin + // การกำหนดค่าตัวแปรให้ขณะประกาศ + int := 1; + r := 3.14; + ch := 'a'; // ใช้ single quote เหมือนกันทั้ง char และ string + str := 'apple'; + bool := true; + // ภาษาปาสกาล มอง "ชื่อเฉพาะ" แบบไม่สนพิมพ์ใหญ่พิมพ์เล็ก + // (case-insensitive language) + // ตัวดำเนินการแบบคณิตศาสตร์ (arithmethic operation) + int := 1 + 1; // int = 2 ซึ่งจะกำหนดทับค่าเดิมด้านบนที่เคยประกาศ + int := int + 1; // int = 2 + 1 = 3 นำค่าตอนนี้ (2) มา +1 ได้ 3 + int := 4 div 2; // int = 2 หารด้วย div จะได้ผลเป็น integer เสมอ + int := 3 div 2; // int = 1 + int := 1 div 2; // int = 0 + + bool := true or false; // bool = true + bool := false and true; // bool = false + bool := true xor true; // bool = false + + r := 3 / 2; // หารด้วย / จะได้ผลเป็น real เสมอ + r := int; // เรากำหนดค่า integer ให้ตัวแปร real ได้ แต่ทำกลับกันไม่ได้ + + c := str[1]; // กำหนดค่าแรกใน array str ให้ตัวแปร c ที่เป็น char + str := 'hello' + 'world'; // เรารวม string เข้าด้วยกันด้วย + + + my_str[0] := 'a'; // กำหนดค่าให้ string เฉพาะตำแหน่งได้แบบตัวแปรอะเรย์ทั่วไป + + setlength(my_2d,10,10); // ปรับขนาดอะเรย์ 2 มิติให้เป็นขนาด 10x10 + // โดยตัวแปร my_2d นี้สร้างแล้วด้านบน + for c := 0 to 9 do // อะเรย์เริ่มจาก 0 และจบที่ ความยาว-1 + for d := 0 to 9 do // ตัวนับ (counter) จำเป็นต้องประกาศมาก่อนนำมาใช้ตรงนี้ + my_2d[c,d] := c * d; + // เรากำหนดอะเรย์หลายมิติได้ด้วยการใช้วงเล็บก้ามปู (square brackets) ชุดเดียว + +End. +// จบโปรแกรมบริบูรณ์ ด้วย "." +``` + +ด้านล่าง เป็นตัวอย่างการเขียนโปรแกรมปาสกาลชื่อ Functional_Programming + +```pascal +program Functional_Programming; + +Var + i, dummy : integer; + +function factorial_recursion(const a: integer) : integer; +{ ทำการคำนวณแฟคทอเรียลซ้ำ ๆ ของเลขจำนวนเต็ม โดยผ่านพารามิเตอร์ a + ถ้าจะประกาศตัวแปรโลคอลในฟังก์ชั่น ก็ทำได้ โดยการใช้บล็อค var ภายในฟังก์ชั่น + เช่น : + var + local_a : integer; +} +Begin + If a >= 1 Then + { ฟังก์ชั่นนี้คืนค่ากลับ โดยการกำหนดค่าที่ผ่านทางพารามิเตอร์ a + นำมาคูณกับฟังก์ชั่นที่ผ่าน a-1 สุดท้ายก็กำหนดค่าลงไปให้กับฟังก์ชั่นตรงๆ } + factorial_recursion := a * factorial_recursion(a-1) + Else + factorial_recursion := 1; +End; // จบ ฟังก์ชั่น ด้วย ";" หลัง End ไม่เหมือนกับจบ โปรแกรม ที่จะใช้ "." + +procedure get_integer(var i : integer; dummy : integer); +{ เรารับ input จากผู้ใช้มาเก็บใน parameter i ที่เป็น integer ที่ตั้งขึ้นในพารามิเตอร์ + โดยใช้ var ประกาศ ทำให้ค่าที่รับเข้ามาจะเปลี่ยนปรับได้จากภายนอกการประกาศพารามิเตอร์นี้ + ส่วน dummy เป็นตัวแปรที่ปรับเปลี่ยนได้ "เฉพาะจากภายในฟังก์ชั่น,โพรซีเยอร์นั้น ๆ } +Begin + write('Enter an integer: '); + readln(i); + dummy := 4; // dummy จะไม่ทำให้ค่าที่ได้รับมาครั้งแรกใน main block เปลี่ยน +End; + +//--------------------// +// main program block +//--------------------// +Begin + dummy := 3; + get_integer(i, dummy); + writeln(i, '! = ', factorial_recursion(i)); + // พิมพ์ค่า i! + writeln('dummy = ', dummy); // จะให้ค่าเป็น '3' เสมอ เพราะจะไม่เปลี่ยนเนื่องด้วย + // การประกาศพารามิเตอร์ในโพรซีเยอร์ get_integer ด้านบน +End. + +``` + +[1]: https://en.wikipedia.org/wiki/Pascal_(programming_language) +[2]: https://www.freepascal.org/ \ No newline at end of file -- cgit v1.2.3 From f2fec78b95166a0c305271534b31d7cb269b9d1e Mon Sep 17 00:00:00 2001 From: Worajedt Sitthidumrong Date: Tue, 16 Jul 2019 21:10:49 +0700 Subject: fix tab characters --- th-th/pascal.th.html.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'th-th') diff --git a/th-th/pascal.th.html.markdown b/th-th/pascal.th.html.markdown index 4fe0c4ac..c4768673 100644 --- a/th-th/pascal.th.html.markdown +++ b/th-th/pascal.th.html.markdown @@ -2,9 +2,9 @@ language: Pascal filename: learnpascal.pas contributors: - - ["Ganesha Danu", "http://github.com/blinfoldking"] - - ["Keith Miyake", "https://github.com/kaymmm"] - - ["Worajedt Sitthidumrong", "https://bitbucket.org/wrj"] + - ["Ganesha Danu", "http://github.com/blinfoldking"] + - ["Keith Miyake", "https://github.com/kaymmm"] + - ["Worajedt Sitthidumrong", "https://bitbucket.org/wrj"] lang: th-th --- @@ -223,5 +223,5 @@ End. ``` -[1]: https://en.wikipedia.org/wiki/Pascal_(programming_language) -[2]: https://www.freepascal.org/ \ No newline at end of file +[1]: https://en.wikipedia.org/wiki/Pascal_(programming_language) +[2]: https://www.freepascal.org/ \ No newline at end of file -- cgit v1.2.3 From 0b9ce8caaec47e116bd2d076984b89755522ebff Mon Sep 17 00:00:00 2001 From: Worajedt Sitthidumrong Date: Tue, 16 Jul 2019 21:27:11 +0700 Subject: try to fix build problem --- th-th/pascal.th.html.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'th-th') diff --git a/th-th/pascal.th.html.markdown b/th-th/pascal.th.html.markdown index c4768673..e1c5b702 100644 --- a/th-th/pascal.th.html.markdown +++ b/th-th/pascal.th.html.markdown @@ -4,11 +4,11 @@ filename: learnpascal.pas contributors: - ["Ganesha Danu", "http://github.com/blinfoldking"] - ["Keith Miyake", "https://github.com/kaymmm"] - - ["Worajedt Sitthidumrong", "https://bitbucket.org/wrj"] + - ["Worajedt Sitthidumrong", "https://github.com/Jedt3D"] lang: th-th --- -Pascal (ปาสกาล) เป็นภาษาโปรแกรมมิ่งทั้งแบบ imperative และ procedural ที่ออกแบบโดย Niklaus Wirth (นิเคล้า เวิร์ท) เมื่อปี 1968-69 และเผยแพร่ตอน 1970 โดยเน้นให้เป็นภาษาที่เล็ก มีประสิทธิภาพ เพื่อเสริมการเขียนโปรแกรมที่มีแนวปฏิบัติที่ดีด้วยการใช้โครงสร้างของตัวภาษา และโครงสร้างข้อมูลมากำกับ ชื่อของภาษานี้ตั้งเป็นเกียรติให้กับนักคณิตศาสตร์ชาวฝรั่งเศส, นักปรัชญา และนักฟิสิกส์ ชื่อ Blaise Pascal (เบลส ปาสกาล) ข้อมูลจาก : [วิกิพีเดีย][1] +>Pascal (ปาสกาล) เป็นภาษาโปรแกรมมิ่งทั้งแบบ imperative และ procedural ที่ออกแบบโดย Niklaus Wirth (นิเคล้า เวิร์ท) เมื่อปี 1968-69 และเผยแพร่ตอน 1970 โดยเน้นให้เป็นภาษาที่เล็ก มีประสิทธิภาพ เพื่อเสริมการเขียนโปรแกรมที่มีแนวปฏิบัติที่ดีด้วยการใช้โครงสร้างของตัวภาษา และโครงสร้างข้อมูลมากำกับ ชื่อของภาษานี้ตั้งเป็นเกียรติให้กับนักคณิตศาสตร์ชาวฝรั่งเศส, นักปรัชญา และนักฟิสิกส์ ชื่อ Blaise Pascal (เบลส ปาสกาล) ข้อมูลจาก : [วิกิพีเดีย][1] การคอมไพล์และรันโค้ดภาษาปาสกาลนี้ สามารถใช้ปาสกาลคอมไพลเลอร์ฟรีชื่อ Free Pascal ได้ โดย [ดาวน์โหลดที่นี่][2] -- cgit v1.2.3 From 31b387a44f0195df9f46644bc8556572dd9d16e9 Mon Sep 17 00:00:00 2001 From: Worajedt Sitthidumrong Date: Wed, 17 Jul 2019 03:10:12 +0700 Subject: fixed the strange char problem (passed local building) --- th-th/pascal.th.html.markdown | 55 +++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 23 deletions(-) (limited to 'th-th') diff --git a/th-th/pascal.th.html.markdown b/th-th/pascal.th.html.markdown index e1c5b702..f5f174d0 100644 --- a/th-th/pascal.th.html.markdown +++ b/th-th/pascal.th.html.markdown @@ -1,14 +1,15 @@ ---- +--- language: Pascal filename: learnpascal.pas contributors: - ["Ganesha Danu", "http://github.com/blinfoldking"] - ["Keith Miyake", "https://github.com/kaymmm"] +translators: - ["Worajedt Sitthidumrong", "https://github.com/Jedt3D"] -lang: th-th +language: th-th --- ->Pascal (ปาสกาล) เป็นภาษาโปรแกรมมิ่งทั้งแบบ imperative และ procedural ที่ออกแบบโดย Niklaus Wirth (นิเคล้า เวิร์ท) เมื่อปี 1968-69 และเผยแพร่ตอน 1970 โดยเน้นให้เป็นภาษาที่เล็ก มีประสิทธิภาพ เพื่อเสริมการเขียนโปรแกรมที่มีแนวปฏิบัติที่ดีด้วยการใช้โครงสร้างของตัวภาษา และโครงสร้างข้อมูลมากำกับ ชื่อของภาษานี้ตั้งเป็นเกียรติให้กับนักคณิตศาสตร์ชาวฝรั่งเศส, นักปรัชญา และนักฟิสิกส์ ชื่อ Blaise Pascal (เบลส ปาสกาล) ข้อมูลจาก : [วิกิพีเดีย][1] +> Pascal (ปาสกาล) เป็นภาษาโปรแกรมมิ่งทั้งแบบ imperative และ procedural ที่ออกแบบโดย Niklaus Wirth (นิเคล้า เวิร์ท) เมื่อปี 1968-69 และเผยแพร่ตอน 1970 โดยเน้นให้เป็นภาษาที่เล็ก มีประสิทธิภาพ เพื่อเสริมการเขียนโปรแกรมที่มีแนวปฏิบัติที่ดีด้วยการใช้โครงสร้างของตัวภาษา และโครงสร้างข้อมูลมากำกับ ชื่อของภาษานี้ตั้งเป็นเกียรติให้กับนักคณิตศาสตร์ชาวฝรั่งเศส, นักปรัชญา และนักฟิสิกส์ ชื่อ Blaise Pascal (เบลส ปาสกาล) ข้อมูลจาก : [วิกิพีเดีย][1] การคอมไพล์และรันโค้ดภาษาปาสกาลนี้ สามารถใช้ปาสกาลคอมไพลเลอร์ฟรีชื่อ Free Pascal ได้ โดย [ดาวน์โหลดที่นี่][2] @@ -37,7 +38,8 @@ type } var { - ตัวแปร ในภาษาปาสกาล ไม่เหมือนกับภาษาอื่น ๆ เพราะต้องประกาศในบล็อค var ก่อนใช้งานเสมอ + ตัวแปร ในภาษาปาสกาล ไม่เหมือนกับภาษาอื่น ๆ + เพราะต้องประกาศในบล็อค var ก่อนใช้งานเสมอ } //มาถึงส่วนโปรแกรมหลัก หรือ main fucntion นั่นเอง @@ -65,7 +67,7 @@ var var a,b : integer; ``` -โค้ดตัวอย่างนี้เป็นโปรแกรม Learn_More ที่เป็นโครงสร้างโปรแกรมง่าย ๆ ที่จบสมบูรณ์หนึ่งโปรแกรม มีบล็อค program, const, type, main (Begin..End.) +โค้ดตัวอย่างนี้เป็นโปรแกรม Learn\_More ที่เป็นโครงสร้างโปรแกรมง่าย ๆ ที่จบสมบูรณ์หนึ่งโปรแกรม มีบล็อค program, const, type, main (Begin..End.) ```pascal program Learn_More; @@ -77,10 +79,11 @@ const // ค่าคงที่ ให้ตั้งชื่อเป็น ตัวพิมพ์ใหญ่ ทั้งหมด ใช้กับชนิดข้อมูลใดๆ ก็ได้ // ค่าคงที่ ก็ตามชื่อเลย กำหนดค่าแล้ว ไม่สามารถเปลี่ยนแปลงได้ขณะรัน -// การประกาศชนิดข้อมูลของเราเอง : ชนิดของตัวแปรสองแบบนี้ จะนำไปใช้ด้านล่าง +// การประกาศชนิดข้อมูลของเราเอง +// "ชนิด" ของตัวแปรสองแบบนี้ จะนำไปใช้ด้านล่าง type ch_array : array [0..255] of char; - // อะเรย์ เป็นชนิดข้อมูลอีกแบบ ที่มี ความยาว/ช่องเก็บข้อมูล และ ชนิดข้อมูล + // อะเรย์ เป็นชนิดข้อมูลที่มี ความยาว/ช่องเก็บข้อมูล และ ชนิดข้อมูล // โค้ดด้านบน เป็นการประกาศอะเรย์ของตัวอักษา 255 ตัวอักษา // ซึ่งได้ ความยาว/ช่องเก็บข้อมูลในตัวแปรตัวนี้ 256 ช่องที่เป็นข้อความ md_array : array of array of integer; @@ -106,14 +109,14 @@ var // ตัวอักษรเป็นแบบ ASCII 8 bit ดังนั้นจะไม่ใช่ UTF, Unicode str : string; // ตัวแปรสตริงจะเก็บข้อความ หรือ char หลาย ๆ ตัว - // ชนิดข้อมูลนี้ไม่เป็นมาตรฐานภาษาแต่แทบทุกคอมไพเลอร์ปาสกาลก็จะมีให้ + // ชนิดข้อมูลนี้ไม่เป็นมาตรฐานภาษาแต่คอมไพเลอร์ปาสกาลก็มักจะมีให้ // ทั่ว ๆ ไปแล้ว จะเป็นอะเรย์ของ char ความยาวตั้งต้น 255 s : string[50]; // แบบนี้คือ กำหนดความยาว string เอง ให้เก็บ char 50 ตัว // แบบนี้ก็ทำให้ประหยัดหน่วยความจำมากขึ้นนั่นเอง my_str: ch_array; // ชนิดตัวแปร ใช้เป็นชนิดที่เรากำหนดเองก็ได้ อย่างตอนนี้ - // ch_array เป็น "ชนิดข้อมูล" ที่เราสร้างขึ้นมาเอง ด้านบนที่บล็อค type + // ch_array เป็น "ชนิดข้อมูล" ที่เราสร้างขึ้นมาในบล็อค type my_2d : md_array; // ตัวแปรแบบอะเรย์ที่ไม่ประกาศขนาด (dynamically sized array) // ก่อนเอาไปใช้จริงต้องระบุขนาดก่อนใช้เสมอ @@ -126,11 +129,13 @@ var li : longint; // มีช่วงข้อมูล [-2,147,483,648..2,147,483,647] lw : longword; // มีช่วงข้อมูล [0..4,294,967,295] c : cardinal; // ก็คือ longword - i64 : int64; // มีช่วงข้อมูล [-9223372036854775808..9223372036854775807] + i64 : int64; // มีช่วงข้อมูล + // [-9223372036854775808..9223372036854775807] qw : qword; // มีช่วงข้อมูล [0..18,446,744,073,709,551,615] // ชนิดข้อมูลแบบ real เพิ่มเติม - rr : real; // มีช่วงข้อมูลที่ขึ้นกับระบบปฏิบัติการ (เช่นเป็นแบบ 8-bit, 16-bit, ฯลฯ) + rr : real; // มีช่วงข้อมูลที่ขึ้นกับระบบปฏิบัติการ + // (เช่นเป็นแบบ 8-bit, 16-bit, ฯลฯ) rs : single; // มีช่วงข้อมูล [1.5E-45..3.4E38] rd : double; // มีช่วงข้อมูล [5.0E-324 .. 1.7E308] re : extended; // มีช่วงข้อมูล [1.9E-4932..1.1E4932] @@ -157,25 +162,26 @@ Begin bool := true xor true; // bool = false r := 3 / 2; // หารด้วย / จะได้ผลเป็น real เสมอ - r := int; // เรากำหนดค่า integer ให้ตัวแปร real ได้ แต่ทำกลับกันไม่ได้ + r := int; // เรากำหนดค่า integer ให้ตัวแปร real ได้ + // แต่ทำกลับกัน โดยกำหนด real ให้ integer ไม่ได้ c := str[1]; // กำหนดค่าแรกใน array str ให้ตัวแปร c ที่เป็น char str := 'hello' + 'world'; // เรารวม string เข้าด้วยกันด้วย + - my_str[0] := 'a'; // กำหนดค่าให้ string เฉพาะตำแหน่งได้แบบตัวแปรอะเรย์ทั่วไป + my_str[0] := 'a'; // กำหนดค่าให้ string เฉพาะตำแหน่งแบบอะเรย์ทั่วไป setlength(my_2d,10,10); // ปรับขนาดอะเรย์ 2 มิติให้เป็นขนาด 10x10 // โดยตัวแปร my_2d นี้สร้างแล้วด้านบน for c := 0 to 9 do // อะเรย์เริ่มจาก 0 และจบที่ ความยาว-1 - for d := 0 to 9 do // ตัวนับ (counter) จำเป็นต้องประกาศมาก่อนนำมาใช้ตรงนี้ + for d := 0 to 9 do // ตัวนับ (counter) จำเป็นต้องประกาศก่อนใช้ my_2d[c,d] := c * d; - // เรากำหนดอะเรย์หลายมิติได้ด้วยการใช้วงเล็บก้ามปู (square brackets) ชุดเดียว + // กำหนดอะเรย์หลายมิติ ด้วยการใช้วงเล็บก้ามปู (square brackets) End. // จบโปรแกรมบริบูรณ์ ด้วย "." ``` -ด้านล่าง เป็นตัวอย่างการเขียนโปรแกรมปาสกาลชื่อ Functional_Programming +ด้านล่าง เป็นตัวอย่างการเขียนโปรแกรมปาสกาลชื่อ Functional\_Programming ```pascal program Functional_Programming; @@ -200,9 +206,10 @@ Begin End; // จบ ฟังก์ชั่น ด้วย ";" หลัง End ไม่เหมือนกับจบ โปรแกรม ที่จะใช้ "." procedure get_integer(var i : integer; dummy : integer); -{ เรารับ input จากผู้ใช้มาเก็บใน parameter i ที่เป็น integer ที่ตั้งขึ้นในพารามิเตอร์ - โดยใช้ var ประกาศ ทำให้ค่าที่รับเข้ามาจะเปลี่ยนปรับได้จากภายนอกการประกาศพารามิเตอร์นี้ - ส่วน dummy เป็นตัวแปรที่ปรับเปลี่ยนได้ "เฉพาะจากภายในฟังก์ชั่น,โพรซีเยอร์นั้น ๆ } +{ เรารับ input จากผู้ใช้มาเก็บใน parameter i ที่เป็น integer ที่ตั้งขึ้นใน + พารามิเตอร์ โดยใช้ var ประกาศ ทำให้ค่าที่รับเข้ามาจะเปลี่ยนปรับได้จาก + ภายนอกการประกาศพารามิเตอร์นี้ ส่วน dummy เป็นตัวแปรที่ปรับเปลี่ยนได้ + "เฉพาะจากภายในฟังก์ชั่น,โพรซีเยอร์นั้น ๆ } Begin write('Enter an integer: '); readln(i); @@ -217,11 +224,13 @@ Begin get_integer(i, dummy); writeln(i, '! = ', factorial_recursion(i)); // พิมพ์ค่า i! - writeln('dummy = ', dummy); // จะให้ค่าเป็น '3' เสมอ เพราะจะไม่เปลี่ยนเนื่องด้วย - // การประกาศพารามิเตอร์ในโพรซีเยอร์ get_integer ด้านบน + writeln('dummy = ', dummy); // จะให้ค่าเป็น '3' เสมอ + // เพราะจะไม่เปลี่ยนเนื่องด้วย + // การประกาศพารามิเตอร์ใน + // โพรซีเยอร์ get_integer ด้านบน End. ``` -[1]: https://en.wikipedia.org/wiki/Pascal_(programming_language) -[2]: https://www.freepascal.org/ \ No newline at end of file +[1]: https://en.wikipedia.org/wiki/Pascal_(programming_language) +[2]: https://www.freepascal.org/ \ No newline at end of file -- cgit v1.2.3 From eee5c877e36c118fefc5a7e913aea01a1f22da94 Mon Sep 17 00:00:00 2001 From: Worajedt Sitthidumrong Date: Wed, 17 Jul 2019 03:31:59 +0700 Subject: remove contributors & translators temporarily --- th-th/pascal.th.html.markdown | 5 ----- 1 file changed, 5 deletions(-) (limited to 'th-th') diff --git a/th-th/pascal.th.html.markdown b/th-th/pascal.th.html.markdown index f5f174d0..b18611ee 100644 --- a/th-th/pascal.th.html.markdown +++ b/th-th/pascal.th.html.markdown @@ -1,11 +1,6 @@ --- language: Pascal filename: learnpascal.pas -contributors: - - ["Ganesha Danu", "http://github.com/blinfoldking"] - - ["Keith Miyake", "https://github.com/kaymmm"] -translators: - - ["Worajedt Sitthidumrong", "https://github.com/Jedt3D"] language: th-th --- -- cgit v1.2.3 From 735b636c93464c38328f01b211251838692ebbaf Mon Sep 17 00:00:00 2001 From: Worajedt Sitthidumrong Date: Wed, 17 Jul 2019 03:36:48 +0700 Subject: add contributors & translators back --- th-th/pascal.th.html.markdown | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'th-th') diff --git a/th-th/pascal.th.html.markdown b/th-th/pascal.th.html.markdown index b18611ee..045adcf8 100644 --- a/th-th/pascal.th.html.markdown +++ b/th-th/pascal.th.html.markdown @@ -1,6 +1,11 @@ --- language: Pascal filename: learnpascal.pas +contributors: + - ["Ganesha Danu", "http://github.com/blinfoldking"] + - ["Keith Miyake", "https://github.com/kaymmm"] +translators: + - ["Worajedt Sitthidumrong", "https://github.com/Jedt3D"] language: th-th --- @@ -228,4 +233,4 @@ End. ``` [1]: https://en.wikipedia.org/wiki/Pascal_(programming_language) -[2]: https://www.freepascal.org/ \ No newline at end of file +[2]: https://www.freepascal.org/ -- cgit v1.2.3 From cefe7bf0f2749a19c6b1d3c260e986b9169fbd0f Mon Sep 17 00:00:00 2001 From: Worajedt Sitthidumrong Date: Wed, 17 Jul 2019 03:46:59 +0700 Subject: Fix the . (dot) at the first line --- th-th/pascal.th.html.markdown | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'th-th') diff --git a/th-th/pascal.th.html.markdown b/th-th/pascal.th.html.markdown index 045adcf8..81f46a5b 100644 --- a/th-th/pascal.th.html.markdown +++ b/th-th/pascal.th.html.markdown @@ -1,14 +1,13 @@ ---- +--- language: Pascal filename: learnpascal.pas contributors: - - ["Ganesha Danu", "http://github.com/blinfoldking"] - - ["Keith Miyake", "https://github.com/kaymmm"] + - ["Ganesha Danu", "http://github.com/blinfoldking"] + - ["Keith Miyake", "https://github.com/kaymmm"] translators: - - ["Worajedt Sitthidumrong", "https://github.com/Jedt3D"] -language: th-th + - ["Worajedt Sitthidumrong", "https://bitbucket.org/wrj"] +lang: th-th --- - > Pascal (ปาสกาล) เป็นภาษาโปรแกรมมิ่งทั้งแบบ imperative และ procedural ที่ออกแบบโดย Niklaus Wirth (นิเคล้า เวิร์ท) เมื่อปี 1968-69 และเผยแพร่ตอน 1970 โดยเน้นให้เป็นภาษาที่เล็ก มีประสิทธิภาพ เพื่อเสริมการเขียนโปรแกรมที่มีแนวปฏิบัติที่ดีด้วยการใช้โครงสร้างของตัวภาษา และโครงสร้างข้อมูลมากำกับ ชื่อของภาษานี้ตั้งเป็นเกียรติให้กับนักคณิตศาสตร์ชาวฝรั่งเศส, นักปรัชญา และนักฟิสิกส์ ชื่อ Blaise Pascal (เบลส ปาสกาล) ข้อมูลจาก : [วิกิพีเดีย][1] การคอมไพล์และรันโค้ดภาษาปาสกาลนี้ สามารถใช้ปาสกาลคอมไพลเลอร์ฟรีชื่อ Free Pascal ได้ โดย [ดาวน์โหลดที่นี่][2] -- cgit v1.2.3 From b5c918ab6f2fe9566adf7d7b22e5b44b24f3f02e Mon Sep 17 00:00:00 2001 From: Worajedt Sitthidumrong Date: Wed, 17 Jul 2019 03:52:25 +0700 Subject: try to fix the yaml header again --- th-th/pascal.th.html.markdown | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'th-th') diff --git a/th-th/pascal.th.html.markdown b/th-th/pascal.th.html.markdown index 81f46a5b..05e37a28 100644 --- a/th-th/pascal.th.html.markdown +++ b/th-th/pascal.th.html.markdown @@ -2,12 +2,13 @@ language: Pascal filename: learnpascal.pas contributors: - - ["Ganesha Danu", "http://github.com/blinfoldking"] - - ["Keith Miyake", "https://github.com/kaymmm"] -translators: - - ["Worajedt Sitthidumrong", "https://bitbucket.org/wrj"] + - ["Ganesha Danu", "http://github.com/blinfoldking"] + - ["Keith Miyake", "https://github.com/kaymmm"] +translator: + - ["Worajedt Sitthidumrong", "https://bitbucket.org/wrj"] lang: th-th --- + > Pascal (ปาสกาล) เป็นภาษาโปรแกรมมิ่งทั้งแบบ imperative และ procedural ที่ออกแบบโดย Niklaus Wirth (นิเคล้า เวิร์ท) เมื่อปี 1968-69 และเผยแพร่ตอน 1970 โดยเน้นให้เป็นภาษาที่เล็ก มีประสิทธิภาพ เพื่อเสริมการเขียนโปรแกรมที่มีแนวปฏิบัติที่ดีด้วยการใช้โครงสร้างของตัวภาษา และโครงสร้างข้อมูลมากำกับ ชื่อของภาษานี้ตั้งเป็นเกียรติให้กับนักคณิตศาสตร์ชาวฝรั่งเศส, นักปรัชญา และนักฟิสิกส์ ชื่อ Blaise Pascal (เบลส ปาสกาล) ข้อมูลจาก : [วิกิพีเดีย][1] การคอมไพล์และรันโค้ดภาษาปาสกาลนี้ สามารถใช้ปาสกาลคอมไพลเลอร์ฟรีชื่อ Free Pascal ได้ โดย [ดาวน์โหลดที่นี่][2] -- cgit v1.2.3 From 9637e569a56c7b4fca3aa9b37ce5906e21874b8e Mon Sep 17 00:00:00 2001 From: Worajedt Sitthidumrong Date: Sat, 3 Aug 2019 03:24:01 +0700 Subject: fix typo translator[s]: (#3575) --- th-th/pascal.th.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'th-th') diff --git a/th-th/pascal.th.html.markdown b/th-th/pascal.th.html.markdown index 05e37a28..bf1da958 100644 --- a/th-th/pascal.th.html.markdown +++ b/th-th/pascal.th.html.markdown @@ -4,7 +4,7 @@ filename: learnpascal.pas contributors: - ["Ganesha Danu", "http://github.com/blinfoldking"] - ["Keith Miyake", "https://github.com/kaymmm"] -translator: +translators: - ["Worajedt Sitthidumrong", "https://bitbucket.org/wrj"] lang: th-th --- -- cgit v1.2.3 From b1f25adeb59ea5f90feb3fa427104e07864a3f51 Mon Sep 17 00:00:00 2001 From: Worajedt Sitthidumrong Date: Tue, 13 Aug 2019 14:21:09 +0700 Subject: translate all paragraphs to Thai. --- th-th/typescript.th.html.markdown | 228 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 th-th/typescript.th.html.markdown (limited to 'th-th') diff --git a/th-th/typescript.th.html.markdown b/th-th/typescript.th.html.markdown new file mode 100644 index 00000000..94305c14 --- /dev/null +++ b/th-th/typescript.th.html.markdown @@ -0,0 +1,228 @@ +--- +language: TypeScript +contributors: + - ["Philippe Vlérick", "https://github.com/pvlerick"] + - ["Worajedt Sitthidumrong", "https://bitbucket.org/wrj"] +filename: learntypescript.ts +lang: th-th +--- + +TypeScript เป็นภาษาที่มีเป้าหมายเพื่อทำให้การพัฒนาซอฟต์แวร์ขนาดใหญ่ด้วย JavaScript ทำได้ง่ายขึ้น โดยที่ TypeScript ได้เพิ่มแนวคิดที่พบทั่วไป อาทิ classes, modules, interfaces, generics และ static typing (ไม่บังคับ) เข้าไปในภาษา JavaScript ดังนั้น TypeScript ก็เลยเป็น Super Set ของ JavaScript อีกที โค้ด JavaScript ทุกส่วน ก็คือโค้ดที่ทำงานได้ถูกต้องใน TypeScript ทำให้เราเพิ่ม TypeScript เข้าไปใช้ในโปรเจคการพัฒนาของเราได้ไม่ยากเลย เพราะ TypeScript คอมไพล์ผลลัพธ์ออกมาเป็น JavaScript ในท้ายสุดอยู่ดี + +บทความนี้จะเน้นเฉพาะ syntax ส่วนขยายของ TypeScript ซึ่งจะไม่รวมกับที่มีใน [JavaScript](/docs/javascript). + +การทดสอบเขียน TypeScript เริ่มได้ง่าย ๆ โดยเข้าไปที่ +[Playground] (http://www.typescriptlang.org/Playground) ซึ่งคุณจะเขียนโค้ดพร้อม autocomplete และเห็นเลยว่ามันจะแปลงมาเป็นผลลัพธ์แบบ JavaScript อย่างไร + +```ts +// There are 3 basic types in TypeScript +let isDone: boolean = false; +let lines: number = 42; +let name: string = "Anders"; + +// But you can omit the type annotation if the variables are derived +// from explicit literals +let isDone = false; +let lines = 42; +let name = "Anders"; + +// When it's impossible to know, there is the "Any" type +let notSure: any = 4; +notSure = "maybe a string instead"; +notSure = false; // okay, definitely a boolean + +// Use const keyword for constants +const numLivesForCat = 9; +numLivesForCat = 1; // Error + +// For collections, there are typed arrays and generic arrays +let list: number[] = [1, 2, 3]; +// Alternatively, using the generic array type +let list: Array = [1, 2, 3]; + +// For enumerations: +enum Color { Red, Green, Blue }; +let c: Color = Color.Green; + +// Lastly, "void" is used in the special case of a function returning nothing +function bigHorribleAlert(): void { + alert("I'm a little annoying box!"); +} + +// Functions are first class citizens, support the lambda "fat arrow" syntax and +// use type inference + +// The following are equivalent, the same signature will be inferred by the +// compiler, and same JavaScript will be emitted +let f1 = function (i: number): number { return i * i; } +// Return type inferred +let f2 = function (i: number) { return i * i; } +// "Fat arrow" syntax +let f3 = (i: number): number => { return i * i; } +// "Fat arrow" syntax with return type inferred +let f4 = (i: number) => { return i * i; } +// "Fat arrow" syntax with return type inferred, braceless means no return +// keyword needed +let f5 = (i: number) => i * i; + +// Interfaces are structural, anything that has the properties is compliant with +// the interface +interface Person { + name: string; + // Optional properties, marked with a "?" + age?: number; + // And of course functions + move(): void; +} + +// Object that implements the "Person" interface +// Can be treated as a Person since it has the name and move properties +let p: Person = { name: "Bobby", move: () => { } }; +// Objects that have the optional property: +let validPerson: Person = { name: "Bobby", age: 42, move: () => { } }; +// Is not a person because age is not a number +let invalidPerson: Person = { name: "Bobby", age: true }; + +// Interfaces can also describe a function type +interface SearchFunc { + (source: string, subString: string): boolean; +} +// Only the parameters' types are important, names are not important. +let mySearch: SearchFunc; +mySearch = function (src: string, sub: string) { + return src.search(sub) != -1; +} + +// Classes - members are public by default +class Point { + // Properties + x: number; + + // Constructor - the public/private keywords in this context will generate + // the boiler plate code for the property and the initialization in the + // constructor. + // In this example, "y" will be defined just like "x" is, but with less code + // Default values are also supported + + constructor(x: number, public y: number = 0) { + this.x = x; + } + + // Functions + dist() { return Math.sqrt(this.x * this.x + this.y * this.y); } + + // Static members + static origin = new Point(0, 0); +} + +// Classes can be explicitly marked as implementing an interface. +// Any missing properties will then cause an error at compile-time. +class PointPerson implements Person { + name: string + move() {} +} + +let p1 = new Point(10, 20); +let p2 = new Point(25); //y will be 0 + +// Inheritance +class Point3D extends Point { + constructor(x: number, y: number, public z: number = 0) { + super(x, y); // Explicit call to the super class constructor is mandatory + } + + // Overwrite + dist() { + let d = super.dist(); + return Math.sqrt(d * d + this.z * this.z); + } +} + +// Modules, "." can be used as separator for sub modules +module Geometry { + export class Square { + constructor(public sideLength: number = 0) { + } + area() { + return Math.pow(this.sideLength, 2); + } + } +} + +let s1 = new Geometry.Square(5); + +// Local alias for referencing a module +import G = Geometry; + +let s2 = new G.Square(10); + +// Generics +// Classes +class Tuple { + constructor(public item1: T1, public item2: T2) { + } +} + +// Interfaces +interface Pair { + item1: T; + item2: T; +} + +// And functions +let pairToTuple = function (p: Pair) { + return new Tuple(p.item1, p.item2); +}; + +let tuple = pairToTuple({ item1: "hello", item2: "world" }); + +// Including references to a definition file: +/// + +// Template Strings (strings that use backticks) +// String Interpolation with Template Strings +let name = 'Tyrone'; +let greeting = `Hi ${name}, how are you?` +// Multiline Strings with Template Strings +let multiline = `This is an example +of a multiline string`; + +// READONLY: New Feature in TypeScript 3.1 +interface Person { + readonly name: string; + readonly age: number; +} + +var p1: Person = { name: "Tyrone", age: 42 }; +p1.age = 25; // Error, p1.x is read-only + +var p2 = { name: "John", age: 60 }; +var p3: Person = p2; // Ok, read-only alias for p2 +p3.x = 35; // Error, p3.x is read-only +p2.x = 45; // Ok, but also changes p3.x because of aliasing + +class Car { + readonly make: string; + readonly model: string; + readonly year = 2018; + + constructor() { + this.make = "Unknown Make"; // Assignment permitted in constructor + this.model = "Unknown Model"; // Assignment permitted in constructor + } +} + +let numbers: Array = [0, 1, 2, 3, 4]; +let moreNumbers: ReadonlyArray = numbers; +moreNumbers[5] = 5; // Error, elements are read-only +moreNumbers.push(5); // Error, no push method (because it mutates array) +moreNumbers.length = 3; // Error, length is read-only +numbers = moreNumbers; // Error, mutating methods are missing +``` + +## อ่านเพิ่มเติมที่ + * [TypeScript Official website] (http://www.typescriptlang.org/) + * [TypeScript language specifications] (https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md) + * [Anders Hejlsberg - Introducing TypeScript on Channel 9] (http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing-TypeScript) + * [Source Code on GitHub] (https://github.com/Microsoft/TypeScript) + * [Definitely Typed - repository for type definitions] (http://definitelytyped.org/) -- cgit v1.2.3 From e616d439632bf17e76685de8298247ee58b01067 Mon Sep 17 00:00:00 2001 From: Worajedt Sitthidumrong Date: Tue, 13 Aug 2019 14:44:19 +0700 Subject: translate to Thai up to interface topic --- th-th/typescript.th.html.markdown | 42 ++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 23 deletions(-) (limited to 'th-th') diff --git a/th-th/typescript.th.html.markdown b/th-th/typescript.th.html.markdown index 94305c14..ce1d3bb8 100644 --- a/th-th/typescript.th.html.markdown +++ b/th-th/typescript.th.html.markdown @@ -15,63 +15,59 @@ TypeScript เป็นภาษาที่มีเป้าหมายเพ [Playground] (http://www.typescriptlang.org/Playground) ซึ่งคุณจะเขียนโค้ดพร้อม autocomplete และเห็นเลยว่ามันจะแปลงมาเป็นผลลัพธ์แบบ JavaScript อย่างไร ```ts -// There are 3 basic types in TypeScript +// TypeScript มี data type พื้นฐาน 3 แบบ let isDone: boolean = false; let lines: number = 42; let name: string = "Anders"; -// But you can omit the type annotation if the variables are derived -// from explicit literals +// แต่เราก็สามารถละการบอกชนิดได้ โดยชนิดตัวแปรก็จะปรับชนิดของเขาจากข้อมูลที่กำหนดให้โดยตรง let isDone = false; let lines = 42; let name = "Anders"; -// When it's impossible to know, there is the "Any" type +// ถ้าไม่รู้ ก็กำหนดเป็นชนิด "Any" ได้ let notSure: any = 4; notSure = "maybe a string instead"; -notSure = false; // okay, definitely a boolean +notSure = false; // โอเค ตอนนี้เป็น Boolean แน่ ๆ -// Use const keyword for constants +// ใช้ const สำหรับสร้าง ค่าคงที่ const numLivesForCat = 9; numLivesForCat = 1; // Error -// For collections, there are typed arrays and generic arrays +// สำหรับ collections มี typed arrays และ generic arrays +// ก็คือ อะเรย์บอกชนิด และ อะเรย์เจเนอริก ตามลำดับ let list: number[] = [1, 2, 3]; -// Alternatively, using the generic array type +// ในอีกทางหนึ่ง สร้างเป็นอะเรย์ชนิด generic array let list: Array = [1, 2, 3]; -// For enumerations: +// และสำหรับ enumerations: enum Color { Red, Green, Blue }; let c: Color = Color.Green; -// Lastly, "void" is used in the special case of a function returning nothing +// สุดท้าย, "void" ใช้เมื่อเป็นกรณีพิเศษที่ฟังก์ชันไม่ส่งค่ากลับ function bigHorribleAlert(): void { alert("I'm a little annoying box!"); } -// Functions are first class citizens, support the lambda "fat arrow" syntax and -// use type inference +// ฟังก์ชั่น (Functions) เป็นสิ่งที่มีความสำคัญมาเป็นอันดับหนึ่ง รองรับการใช้ "fat arrow" ในการสร้าง lambda function และ type inference -// The following are equivalent, the same signature will be inferred by the -// compiler, and same JavaScript will be emitted +// สไตล์ต่อไปนี้มีค่าเท่ากันกับบรรทัดที่ยกตัวอย่างด้านล่าง เพราะคอมไพเลอร์จะมองเหมือนกัน และได้ JavaScript แบบเดียวกัน let f1 = function (i: number): number { return i * i; } -// Return type inferred +// อนุมานชนิดที่ส่งกลับ หรือ type inferred let f2 = function (i: number) { return i * i; } -// "Fat arrow" syntax +// เขียนแบบ "Fat arrow" แต่บอกชนิดส่งกลับ let f3 = (i: number): number => { return i * i; } -// "Fat arrow" syntax with return type inferred +// เขียนแบบ "Fat arrow" แต่อนุมานชนิดส่งกลับ let f4 = (i: number) => { return i * i; } -// "Fat arrow" syntax with return type inferred, braceless means no return -// keyword needed +// เขียนแบบ "Fat arrow" อนุมานชนิดส่งกลับ พร้อมกับไม่มีวงเล็บ แปลว่าไม่ต้องมี return keyword ด้วย let f5 = (i: number) => i * i; -// Interfaces are structural, anything that has the properties is compliant with -// the interface +// Interfaces นั้นเป็นเหมือนเราออกแบบโครงสร้าง คุณสมบัติต่าง ๆ ตอนเอาไปใช้ จะต้องเป็นไปตาม interface นั้น ๆ interface Person { name: string; - // Optional properties, marked with a "?" + // Optional properties กำหนดด้วย "?" age?: number; - // And of course functions + // และมี function พร้อมชนิดได้ใน interface move(): void; } -- cgit v1.2.3 From 121627522d97be99958b9c18e77a47e77cf12a76 Mon Sep 17 00:00:00 2001 From: Worajedt Sitthidumrong Date: Tue, 13 Aug 2019 16:02:01 +0700 Subject: finish translate TypeScript to Thai language --- th-th/typescript.th.html.markdown | 84 +++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 42 deletions(-) (limited to 'th-th') diff --git a/th-th/typescript.th.html.markdown b/th-th/typescript.th.html.markdown index ce1d3bb8..29f9b16e 100644 --- a/th-th/typescript.th.html.markdown +++ b/th-th/typescript.th.html.markdown @@ -9,10 +9,10 @@ lang: th-th TypeScript เป็นภาษาที่มีเป้าหมายเพื่อทำให้การพัฒนาซอฟต์แวร์ขนาดใหญ่ด้วย JavaScript ทำได้ง่ายขึ้น โดยที่ TypeScript ได้เพิ่มแนวคิดที่พบทั่วไป อาทิ classes, modules, interfaces, generics และ static typing (ไม่บังคับ) เข้าไปในภาษา JavaScript ดังนั้น TypeScript ก็เลยเป็น Super Set ของ JavaScript อีกที โค้ด JavaScript ทุกส่วน ก็คือโค้ดที่ทำงานได้ถูกต้องใน TypeScript ทำให้เราเพิ่ม TypeScript เข้าไปใช้ในโปรเจคการพัฒนาของเราได้ไม่ยากเลย เพราะ TypeScript คอมไพล์ผลลัพธ์ออกมาเป็น JavaScript ในท้ายสุดอยู่ดี -บทความนี้จะเน้นเฉพาะ syntax ส่วนขยายของ TypeScript ซึ่งจะไม่รวมกับที่มีใน [JavaScript](/docs/javascript). +บทความนี้จะเน้นเฉพาะ syntax ส่วนขยายของ TypeScript ซึ่งจะไม่รวมกับที่มีใน [JavaScript](/docs/javascript) การทดสอบเขียน TypeScript เริ่มได้ง่าย ๆ โดยเข้าไปที่ -[Playground] (http://www.typescriptlang.org/Playground) ซึ่งคุณจะเขียนโค้ดพร้อม autocomplete และเห็นเลยว่ามันจะแปลงมาเป็นผลลัพธ์แบบ JavaScript อย่างไร +[Playground](http://www.typescriptlang.org/Playground) ซึ่งคุณจะเขียนโค้ดพร้อม autocomplete และเห็นเลยว่ามันจะแปลงมาเป็นผลลัพธ์แบบ JavaScript อย่างไร ```ts // TypeScript มี data type พื้นฐาน 3 แบบ @@ -62,7 +62,7 @@ let f4 = (i: number) => { return i * i; } // เขียนแบบ "Fat arrow" อนุมานชนิดส่งกลับ พร้อมกับไม่มีวงเล็บ แปลว่าไม่ต้องมี return keyword ด้วย let f5 = (i: number) => i * i; -// Interfaces นั้นเป็นเหมือนเราออกแบบโครงสร้าง คุณสมบัติต่าง ๆ ตอนเอาไปใช้ จะต้องเป็นไปตาม interface นั้น ๆ +// Interfaces นั้นเป็นเหมือนเราออกแบบโครงสร้าง คุณสมบัติต่าง ๆ ตอนเอาไปใช้ จะต้องเป็นไปตาม interface นั้น ๆ เหมือนกับเป็นการกำหนดสเป็คของ "ชนิดข้อมูล" interface Person { name: string; // Optional properties กำหนดด้วย "?" @@ -71,70 +71,70 @@ interface Person { move(): void; } -// Object that implements the "Person" interface -// Can be treated as a Person since it has the name and move properties +// Object นี้ implements "Person" interface ทำให้มันเป็นชนิด Person และมันก็มี property name และ function move() let p: Person = { name: "Bobby", move: () => { } }; -// Objects that have the optional property: +// Objects นี้เป็นชนิด Person ด้วย และมี optional property หรือ age?: นั่นเอง let validPerson: Person = { name: "Bobby", age: 42, move: () => { } }; -// Is not a person because age is not a number +// ไม่ใช่ Person เพราะ age: ต้องเป็น number เท่านั้น ตามข้อกำหนดใน interface Person let invalidPerson: Person = { name: "Bobby", age: true }; -// Interfaces can also describe a function type +// Interfaces ยังนำมาใช้ในลักษณะของ function ได้อีกด้วย interface SearchFunc { (source: string, subString: string): boolean; } -// Only the parameters' types are important, names are not important. +// เฉพาะชนิด parameters เท่านั้นที่สำคัญ ชื่อของมันไม่จำเป็นต้องเหมือน let mySearch: SearchFunc; mySearch = function (src: string, sub: string) { return src.search(sub) != -1; } -// Classes - members are public by default +// สมาชิกใน class จะเข้าถึงได้แบบ public เป็นค่าปริยาย class Point { // Properties + // ตั้งค่า Properties ของ class นี้ x: number; - // Constructor - the public/private keywords in this context will generate - // the boiler plate code for the property and the initialization in the - // constructor. - // In this example, "y" will be defined just like "x" is, but with less code - // Default values are also supported + // Constructor + // เราใส่ public/private keywords ตรงนี้ได้ มีผลเหมือนกันกับกำหนด x ด้านบน + // ในตัวอย่าง y มีการกำหนดเช่นเดียวกับ x แต่พิมพ์สั้นกว่า + // สังเกตว่า มีการกำหนดค่าปริยายให้ parameters ได้ด้วย constructor(x: number, public y: number = 0) { this.x = x; } // Functions - dist() { return Math.sqrt(this.x * this.x + this.y * this.y); } + dist() { return Math.sqrt(this.x*this.x + this.y*this.y); } // Static members static origin = new Point(0, 0); } -// Classes can be explicitly marked as implementing an interface. -// Any missing properties will then cause an error at compile-time. +// Classes สามารถระบุชนิด interface ที่ต้องการได้ตรง ๆ ด้วยเช่นโค้ดด้านล่าง +// แต่อะไรที่จะ implement มานั้น ถ้าไม่ได้กำหนดไว้ใน constructor ก็จะเกิดข้อผิดพลาดตอนคอมไพล์ class PointPerson implements Person { - name: string + name: string // ตรงนี้จะผิด แก้ไขโดยการไปสร้างตัวรับค่าเข้ามาผ่านทาง constructor move() {} } let p1 = new Point(10, 20); -let p2 = new Point(25); //y will be 0 +let p2 = new Point(25); //y เป็น 0 เพราะกำหนดค่าปริยายไว้ให้แล้ว -// Inheritance +// Inheritance การสืบทอดคุณสมบัติ class Point3D extends Point { constructor(x: number, y: number, public z: number = 0) { - super(x, y); // Explicit call to the super class constructor is mandatory + super(x, y); // เราจะต้องเรียกใช้ super class constructor โดยตรง } - // Overwrite + // Overwrite ฟังก์ชั่นที่มีอยู่เดิมใน Point dist() { let d = super.dist(); return Math.sqrt(d * d + this.z * this.z); } } -// Modules, "." can be used as separator for sub modules +// Modules ใช้เป็นกลุ่มของ class เราใช้ "." เป็นตัวแบ่ง sub modules +// อย่างกรณีนี้จะเป็น Module.Class เช่น Geometry.Square module Geometry { export class Square { constructor(public sideLength: number = 0) { @@ -147,7 +147,7 @@ module Geometry { let s1 = new Geometry.Square(5); -// Local alias for referencing a module +// เราทำให้เรียกใช้ง่ายขึ้นโดยการใช้ alias มาอ้างชื่อ module แบบเดียวกับบางภาษา เช่น Python import G = Geometry; let s2 = new G.Square(10); @@ -165,37 +165,37 @@ interface Pair { item2: T; } -// And functions +// และ functions let pairToTuple = function (p: Pair) { return new Tuple(p.item1, p.item2); }; let tuple = pairToTuple({ item1: "hello", item2: "world" }); -// Including references to a definition file: +// เราเรียกใช้ไฟล์ definition แบบนี้: /// -// Template Strings (strings that use backticks) -// String Interpolation with Template Strings +// Template Strings ( คือ strings ที่ใช้ backticks ครอบ — "`" ปุ่มบนซ้ายคีย์บอร์ด ) +// แทรกข้อความใน String ด้วย Template Strings let name = 'Tyrone'; let greeting = `Hi ${name}, how are you?` -// Multiline Strings with Template Strings +// Strings หลายบรรทัดก็ทำได้ใน Template Strings let multiline = `This is an example of a multiline string`; -// READONLY: New Feature in TypeScript 3.1 +// READONLY: ความสามารถใหม่ใน TypeScript 3.1 interface Person { readonly name: string; readonly age: number; } var p1: Person = { name: "Tyrone", age: 42 }; -p1.age = 25; // Error, p1.x is read-only +p1.age = 25; // Error แน่นอน เพราะ p1.x ถูกกำหนดเป็น read-only -var p2 = { name: "John", age: 60 }; -var p3: Person = p2; // Ok, read-only alias for p2 -p3.x = 35; // Error, p3.x is read-only -p2.x = 45; // Ok, but also changes p3.x because of aliasing +var p2 = { name: "John", age: 60 }; // สังเกตว่า p2 ไม่ได้กำหนดเป็น Person +var p3: Person = p2; // ทำได้ เป็น read-only alias ของ p2 และกำหนดเป็น Person +p3.x = 35; // Error p3.x ก็เป็น read-only +p2.x = 45; // Ok ทำได้แต่ก็จะเปลี่ยนค่า p3.x ด้วย เพราะ p3 เป็น alias ของ p2 class Car { readonly make: string; @@ -203,17 +203,17 @@ class Car { readonly year = 2018; constructor() { - this.make = "Unknown Make"; // Assignment permitted in constructor - this.model = "Unknown Model"; // Assignment permitted in constructor + this.make = "Unknown Make"; // อนุญาตให้กำหนดค่าได้ใน constructor แม้ว่าจะ read-only + this.model = "Unknown Model"; // อนุญาตให้กำหนดค่าได้ใน constructor แม้ว่าจะ read-only } } let numbers: Array = [0, 1, 2, 3, 4]; let moreNumbers: ReadonlyArray = numbers; -moreNumbers[5] = 5; // Error, elements are read-only -moreNumbers.push(5); // Error, no push method (because it mutates array) -moreNumbers.length = 3; // Error, length is read-only -numbers = moreNumbers; // Error, mutating methods are missing +moreNumbers[5] = 5; // Error, สมาชิกอะเรย์เป็น read-only แปลว่า ห้ามแก้ไข +moreNumbers.push(5); // Error, push method ใช้ไม่ได้ เพราะมันจะไปแก้ไข read-only array +moreNumbers.length = 3; // Error, เพราะ length ก็ต้อง read-only +numbers = moreNumbers; // Error, method ที่ทำให้อะเรย์เปลี่ยนได้จะไม่อนุญาต ``` ## อ่านเพิ่มเติมที่ -- cgit v1.2.3 From 7e06e77a44cba2695157ba1edaeb7c24561d0def Mon Sep 17 00:00:00 2001 From: Worajedt Sitthidumrong Date: Tue, 13 Aug 2019 16:22:32 +0700 Subject: additional translation for Iterators, Generators --- th-th/typescript.th.html.markdown | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'th-th') diff --git a/th-th/typescript.th.html.markdown b/th-th/typescript.th.html.markdown index 29f9b16e..88b0fc0b 100644 --- a/th-th/typescript.th.html.markdown +++ b/th-th/typescript.th.html.markdown @@ -214,6 +214,41 @@ moreNumbers[5] = 5; // Error, สมาชิกอะเรย์เป็ moreNumbers.push(5); // Error, push method ใช้ไม่ได้ เพราะมันจะไปแก้ไข read-only array moreNumbers.length = 3; // Error, เพราะ length ก็ต้อง read-only numbers = moreNumbers; // Error, method ที่ทำให้อะเรย์เปลี่ยนได้จะไม่อนุญาต + +// Tagged Union Types สำหรับโมเดลสเตท ที่อาจจะมีได้หลายๆ สเตท +type State = + | { type: "loading" } + | { type: "success", value: number } + | { type: "error", message: string }; + +ประกาศ const state: State; +if (state.type === "success") { + console.log(state.value); +} else if (state.type === "error") { + console.error(state.message); +} + +// Iterators และ Generators + +// ประโยคแบบ for..of +// การทำซ้ำกับ ลิสต์ของค่าในออปเจ็คต์ +let arrayOfAnyType = [1, "string", false]; +for (const val of arrayOfAnyType) { + console.log(val); // 1, "string", false +} + +let list = [4, 5, 6]; +for (const i of list) { + console.log(i); // 4, 5, 6 +} + +// ประโยคแบบ for..in +// การทำซ้ำกับ ลิสต์ของคีย์ในออปเจ็คต์ +for (const i in list) { + console.log(i); // 0, 1, 2 +} + + ``` ## อ่านเพิ่มเติมที่ -- cgit v1.2.3 From 65ab14ca41d58670e73874ea31c8574637d8e749 Mon Sep 17 00:00:00 2001 From: Worajedt Sitthidumrong Date: Wed, 14 Aug 2019 02:34:53 +0700 Subject: fix file name per request 'learntypescript-th.ts' --- th-th/typescript.th.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'th-th') diff --git a/th-th/typescript.th.html.markdown b/th-th/typescript.th.html.markdown index 88b0fc0b..fc2a823b 100644 --- a/th-th/typescript.th.html.markdown +++ b/th-th/typescript.th.html.markdown @@ -3,7 +3,7 @@ language: TypeScript contributors: - ["Philippe Vlérick", "https://github.com/pvlerick"] - ["Worajedt Sitthidumrong", "https://bitbucket.org/wrj"] -filename: learntypescript.ts +filename: learntypescript-th.ts lang: th-th --- -- cgit v1.2.3 From fb48be47d6cac609cf9d29caae5d4e73df3e214a Mon Sep 17 00:00:00 2001 From: Ross Mackay Date: Tue, 22 Oct 2019 13:16:52 +0100 Subject: Fix outdated comment in en/th-th typescript docs --- th-th/typescript.th.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'th-th') diff --git a/th-th/typescript.th.html.markdown b/th-th/typescript.th.html.markdown index fc2a823b..5395c2a7 100644 --- a/th-th/typescript.th.html.markdown +++ b/th-th/typescript.th.html.markdown @@ -190,7 +190,7 @@ interface Person { } var p1: Person = { name: "Tyrone", age: 42 }; -p1.age = 25; // Error แน่นอน เพราะ p1.x ถูกกำหนดเป็น read-only +p1.age = 25; // Error แน่นอน เพราะ p1.age ถูกกำหนดเป็น read-only var p2 = { name: "John", age: 60 }; // สังเกตว่า p2 ไม่ได้กำหนดเป็น Person var p3: Person = p2; // ทำได้ เป็น read-only alias ของ p2 และกำหนดเป็น Person -- cgit v1.2.3