ลองใช้ Boo ในที่ทำงาน

ตอนเขียนโปรแกรมติดต่อพวกอุปกรณ์ภายนอก​​​​​​​ ​​​​​​​ส่วน​​​​​​​​​​​​​มากมัก​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ใช้​​​​​​​ serial port ​​​​​​​รับส่งคำ​​​​​​​​​​​​​สั่ง​​​​​​​​​​​​​เป็น​​​​​​​ string
ข้อมูลที่รับมาก็​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​เอามาผ่านตัว​​​​​​​ parser ​​​​​​​ก่อน​​​​​​​​​​​​​จะ​​​​​​​​​​​​​แตก​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​ข้อมูลเอามาประมวลผล​​​​​​​ ​​​​​​​ซึ่ง​​​​​​​​​​​​​ข้อมูลที่ส่งกลับมามัก​​​​​​​​​​​​​จะ​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​ลิสต์ของ​​​​​​​ Hex ​​​​​​​ลักษณะนี้

[A5,B8,77,99,00,43,6F]

ปกติ​​​​​​​​​จะ​​​​​​​​​ใช้​​​ไลบรารีที่มีคนทำ​​​​​​​​​ไว้​​​​​ ​​​​​แต่บางที​​​​​​​​​เราก็ต้่องการอะ​​​​​​​​​ไรด่วนๆ​​​​​​​​​ง่ายๆ​​​ ​​​​​ต้อง​​​​​​​​​การแค่ดูข้อมูลไหล​​​​​​​​​เข้า​​​​​​​​​ออก​​ ​​แค่​​​นั้น
โดย​​​​​​​​​ทั่วๆ​​​​​​​​​ไป​​​​​ ​​​​​ก็​​​​​​​​​ใช้​​​​​​​​​พวกโปรแกรมที่ตั้ง​​​ให้​​​ส่งข้อมูล​​​​​​​​​เป็น​​​​​​​​​ชุดๆ​​​​​ ​​​​​ได้​​​​​​​ ​​อย่างพวก​​ DockLight
แต่​​​​​​​​​เราอยาก​​​​​​​​​ให้​​​​​​​​​มันประมวลผล​​​​​​​​​ได้​​​​​​​​​ด้วย​​​​​ ​​​​​จะ​​​​​​​​​ได้​​​​​​​​​ดูข้อมูลผลลัพธ์​​​​​​​​​ได้​​​​​​​​​ง่ายๆ

Boo ​​​​​มี​​​​​​​​​ไวยากรณ์ของภาษาที่สนับสนุน​​​​​​​​​ใน​​​​​​​​​การจัดการอะ​​​​​​​​​ไรพวกนี้​​​​​​​​​อยู่​​​​​​​​​แล้ว​​​​​ (slicing, generator) ​​​​​เราก็จัดการ​​​​​​​​​ได้​​​​​​​​​ง่ายๆ​​​​​ ​​​​​เช่นเราอ่านข้อมูล​​​​​​​​​เข้า​​​​​​​​​มา​​​​​​​​​เป็น

text = [4C,4F,56,45]

ต้อง​​​​​​​​​การ​​​​​​​​​ให้​​​​​​​​​แสดงข้อมูล​​​​​​​​​เป็น​​​​​​​​​รหัส​​​​​ Ascii ​​​​​ของข้อมูลชุดนี้​​​​​ ​​​​​แล้ว​​​​​​​​​ก็​​​​​​​​​แสดงค่าที่​​​​​​​​​เป็น​​​​​ Hex ​​​​​ไว้​​​​​​​​​ข้างๆ​​​​​​​​​ด้วย
เขียน​​​​​​​​​เป็น​​​​​​​​​โค้ด​​​​​ Boo ​​​​​ง่ายๆ

ขั้นแรกแปลง​​​​​​​​​ให้​​​​​​​​​เป็น​​​​​​​​​ลิสต์ของ​​​​​ int ​​​​​ก่อน

result = [int.Parse(s, NumberStyles.HexNumber) for s in text[1:-1].Split(char(','))]

แล้ว​​​​​​​ก็​​​​​​​แปลง​​​​​​​ให้​​​​​​​เป็น​​​​​​​ผลลัพธ์ที่​​​​​​​ต้อง​​​​​​​การ

stringResult = [Convert.ToChar(i) for i in result].Join("")
hexResult = [i.ToString("X2") for i in result].Join(",")

ใน​​​​ Boo ​​​​มี​​​​ built-in function ​​​​ที่ชื่อ​​​​ join ​​​​ไว้​​​​​​​ให้​​​​​​​เราอาจเขียนแบบนี้ก็​​​​​​​ได้

stringResult = join([Convert.ToChar(i) for in in result], "")
hexResult = join([i.ToString("X2") for i in result], ",")

ได้​​​​​​​ผลลัพธ์​​​​​​​เหมือน​​​​​​​กัน

Leave a Reply