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 จากนั้น −

OperatorDescriptionExample
==ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ ถ้าใช่ เงื่อนไขจะกลายเป็นจริง(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” ในกรณีที่เราประกาศตัวแปรขึ้นมาแต่ไม่ได้กำหนดค่าให้กับมัน ตัวอย่างเช่น

TypeZero Value
boolfalse
int0
float0.0
string“”
functionnil

เขียนโค้ดที่ไฟล์ 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/

Leave a Reply

Your email address will not be published. Required fields are marked *