Deal สร้างไพ่ที่มือผู้เล่น
เขียนโค้ด ฟังก์ชั่น deal ที่ไฟล์ deck.go ดังนี้
func deal (d deck, handSize int) (deck , deck) {
return d[:handSize], d[handSize:]
}
- Function name คือชื่อฟังก์ชันที่เราตั้งขึ้นมา ชื่อ deal มีหน้าที่ในการ แจกไพ่
- Parameter list จะอยู่ใน () ลำดับแรกคือ d deck เป็นข้อมูลรายการจำนวนไพ่ทั้งหมดที่มี มีชนิดข้อมูลเป็น String และ handSize คือแจกแจงจำนวนไพ่ที่เราต้องการให้อยู่ในมือ มีชนิดข้อมูลเป็น int
- Return type มีชนิดข้อมูลจะทำการรับค่ากลับ คือ deck และ deck
- สมมติ ว่า handSize มีค่าเท่ากับ 3 ฉะนั้น d[:handSize] d คือ รายการจำนวนไพ่ทั้งหมด เลือกมาเพียงแค่ตามค่า handSize ก็คือ 3 ใบ โดยเริ่มจากค่าเริ่มต้น จนถึง 3 ผลลัพธ์ที่ได้คือ ไพ่ 3 ใบ 0 Ace fo Spades , 1 Tow fo Spades , 2 Three fo Spades
- ฉะนั้น d[handSize:] ได้มาจากค่า handSize ก็คือ 3 โดยเริ่มจาก หลัง 3 ก็คือ 4 ผลลัพธ์ที่ได้คือไพ่ที่เหลือ 3 Four of Spades
การส่งค่ากลับ ภายในฟังก์ชัน
เขียนโค้ด ที่ไฟล์ main.go ดังนี้
package main
func main() {
cards := newDeck()
hand, remainingCards := deal(cards,5)
hand.print()
remainingCards.print()
}
พารามิเตอร์และอาร์กิวเมนต์
ผลลัพธ์การทำงาน
- ตอนนี้ handSize มีค่าเท่ากับ 5 ฉะนั้น d[:handSize] d คือ รายการจำนวนไพ่ทั้งหมด เลือกมาเพียงแค่ตามค่า handSize ก็คือ 5 ใบ โดยเริ่มจากค่าเริ่มต้น จนถึง 5 ผลลัพธ์ที่ได้คือ ไพ่ 5 ใบ 0 1 2 3 4
- ฉะนั้น d[handSize:] ได้มาจากค่า handSize ก็คือ 5 โดยเริ่มจาก หลัง 5 ก็คือ 6 ผลลัพธ์ที่ได้คือไพ่ที่เหลือ
สังเกตการ์ดทั้งหมดยังเรียง ปรกติ เหมือนเดิม แต่ตัวเลขด้านหน้าเปลี่ยนไป แยกเป็นชุด คือ (ตัวแปร hand) 0 1 2 3 4 คือชุดการ์ดที่มือผู้เล่น และ 0 1 2 3 4 5 6 7 8 9 10 คือ ชุดการ์ดที่เหลือ (ตัวแปร remainingCards)
แอสกี (ascii)
แอสกี (ascii) หรือ รหัสมาตรฐานของสหรัฐอเมริกาเพื่อการแลกเปลี่ยนสารสนเทศ ( ASCII: American Standard Code for Information Interchange) เป็นรหัสอักขระที่ประกอบด้วยอักษรละติน เลขอารบิก เครื่องหมายวรรคตอน และสัญลักษณ์ต่างๆ โดยแต่ละรหัสจะแทนด้วยตัวอักขระหนึ่งตัว เช่น รหัส 65 ช่อง Dec ใช้แทนอักษร A ในช่อง Chr เป็นต้น
ASCII Table
ตัวอย่าง ถ้ามีข้อความ “Hi there!” แล้วแปลงเป็น แอสกี (ascii) ก็จะได้แอสกี ตามรูปในส่วนของ byte slice
เราสามารถใช้ภาษา Go ในการแปลง ตามตัวอย่างด้านบนได้เช่นกัน โดยใช้งานฟังก์ชัน WriteFile เพื่อจัดการกับ String ซึ่งเป็นฟังก์ชันมาตรฐานของภาษา Go ซึ่งมีในไลบรารี่ โดยดูรายละเอียดการใช้งานได้ตามลิงค์ https://pkg.go.dev/io/ioutil#WriteFile
[]byte คือ ต้องการแปลงข้อมูลให้เป็น byte และ “Hi there!” คือ ข้อความที่ต้องการแปลง
ที่ ไฟล์ main.go เขียนโค้ดดังนี้
package main
import "fmt"
func main() {
greeting := "Hi there!"
fmt.Println([]byte(greeting))
}
go run main.gok ผลลัพธ์การทำงาน
การแปลงข้อมูล จาก string เป็น byte ใน Workshop ของเรา
เราเลือกใช้งานฟังก์ชัน func Join ซึ่งเป็นฟังก์ชันมาตรฐานของภาษา Go เพื่อจัดการกับ String โดยดูรายละเอียดการใช้งานได้ตามลิงค์ https://pkg.go.dev/strings#Join
เขียนโค้ดที่ไฟล์ deck.go เพิ่มดังนี้
นำเข้า package หรือเรียกว่า library ชื่อ strings มาใช้ในไฟล์โค้ดเรา
import "strings"
เพิ่มฟังก์ชัน toString ด้วยโค้ดนี้
func (d deck) toString() string {
return strings.Join([]string(d), ",")
}
เขียนโค้ดที่ไฟล์ main.go
package main
import "fmt"
func main() {
cards := newDeck()
fmt.Println(cards.toString())
}
go run main.go deck.go ผลลัพธ์การทำงาน
SaveToFile เก็บรายชื่อไพ่เป็นไฟล์
การเก็บรายชื่อไพ่เป็นไฟล์ เราเลือกใช้งานฟังก์ชัน WriteFile ซึ่งเป็นฟังก์ชันมาตรฐานของภาษา Go โดยดูรายละเอียดการใช้งานได้ตามลิงค์ https://pkg.go.dev/io/ioutil#WriteFile
เขียนโค้ดที่ไฟล์ deck.go เพิ่มดังนี้
นำเข้า package ชื่อ io/ioutil มาใช้ในไฟล์โค้ดเรา (โดยศึกษาการเลือกใช้งานแพ็คเกจ ต่างๆ เพิ่มเติมได้ที่ Standard library : https://pkg.go.dev/std )
เพิ่มฟังก์ชัน saveToFile ด้วยโค้ดนี้
func (d deck) saveToFile(filename string) error {
return ioutil.WriteFile(filename , []byte(d.toString()), 0666)
}
เขียนโค้ดที่ไฟล์ main.go
package main
import "fmt"
func main() {
cards := newDeck()
fmt.Println(cards.saveToFile("my_cards"))
}
go run main.go deck.go ผลลัพธ์การทำงาน จะสร้างไฟล์ my_cards เพิ่มเข้ามา
การอ่านไฟล์
การอ่านไฟล์ เราเลือกใช้งานฟังก์ชัน ReadFile ซึ่งเป็นฟังก์ชันมาตรฐานของภาษา Go โดยดูรายละเอียดการใช้งานได้ตามลิงค์ https://pkg.go.dev/io/ioutil#ReadFile
เขียนโค้ดที่ไฟล์ deck.go เพิ่มดังนี้
นำเข้า package ชื่อ os มาใช้ในไฟล์โค้ดเรา (โดยศึกษาการเลือกใช้งานแพ็คเกจ ต่างๆ เพิ่มเติมได้ที่ Standard library : https://pkg.go.dev/std )
ฟังก์ชัน Exit ซึ่งเป็นฟังก์ชันมาตรฐานของภาษา Go โดยดูรายละเอียดการใช้งานได้ตามลิงค์ https://pkg.go.dev/os#Exit
ฟังก์ชัน Split ซึ่งเป็นฟังก์ชันมาตรฐานของภาษา Go โดยดูรายละเอียดการใช้งานได้ตามลิงค์ https://pkg.go.dev/strings#Split
import "os"
เพิ่มฟังก์ชัน newDeckFormFile ตามโค้ดด้านล่าง
func newDeckFormFile(filename string) deck {
bs, err := ioutil.ReadFile(filename)
if err != nil {
// Option #1 - log the error and return a call to newDeck()
// Option #2 - log the error and entirely quit the program
fmt.Println("Error", err)
os.Exit(1)
}
s := strings.Split(string(bs), ",")
return deck(s)
}
Relational Operators
ตารางต่อไปนี้แสดงรายการตัวดำเนินการเชิงสัมพันธ์ทั้งหมดที่สนับสนุนโดยภาษา Go สมมติว่าตัวแปร A มีค่า 10 และตัวแปร B มีค่าเท่ากับ 20 จากนั้น −
Operator | Description | Example |
---|---|---|
== | ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ ถ้าใช่ เงื่อนไขจะกลายเป็นจริง | (A == B) is not true. |
!= | ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ ถ้าค่าไม่เท่ากัน เงื่อนไขจะกลายเป็นจริง | (A != B) is true. |
> | จะตรวจสอบว่าค่าของตัวถูกดำเนินการทางซ้ายมากกว่าค่าของตัวถูกดำเนินการทางขวาหรือไม่ ถ้าใช่ เงื่อนไขจะกลายเป็นจริง | (A > B) is not true. |
< | จะตรวจสอบว่าค่าของตัวถูกดำเนินการทางซ้ายน้อยกว่าค่าของตัวถูกดำเนินการทางขวาหรือไม่ ถ้าใช่ เงื่อนไขจะกลายเป็นจริง | (A < B) is true. |
>= | จะตรวจสอบว่าค่าของตัวถูกดำเนินการทางซ้ายมากกว่าหรือเท่ากับค่าของตัวถูกดำเนินการทางขวาหรือไม่ ถ้าใช่ เงื่อนไขจะกลายเป็นจริง | (A >= B) is not true. |
<= | ตรวจสอบว่าค่าของตัวถูกดำเนินการทางซ้ายน้อยกว่าหรือเท่ากับค่าของตัวถูกดำเนินการทางขวาหรือไม่ ถ้าใช่ เงื่อนไขจะกลายเป็นจริง | (A <= B) is true. |
Zero Values เป็นคำสำหรับค่า “default value” ในกรณีที่เราประกาศตัวแปรขึ้นมาแต่ไม่ได้กำหนดค่าให้กับมัน ตัวอย่างเช่น
Type | Zero Value |
---|---|
bool | false |
int | 0 |
float | 0.0 |
string | “” |
function | nil |
เขียนโค้ดที่ไฟล์ main.go
package main
func main() {
cards := newDeckFormFile("my_cards")
cards.print()
}
go run main.go deck.go ผลลัพธ์การทำงาน
credit : https://www.udemy.com/course/go-the-complete-developers-guide/