3/28/2013

Data Types ใน Tcl

หลักๆ เราคงจะรู้อยู่แล้่วว่าหลักๆ ยังไงต้องมีตัวเลข(Number) และข้อความ(String) ล่ะ ซึ่งก็ยังไม่ได้ดูนะว่า Data Type ของมันหน้าตาเป็นไง(Number มันเดาง่ายอยู่ล่ะ) แต่ก็มีคำถามที่คิดในหัวอยู่ล่ะหลักๆ คือ
  1. floating point มันเป็นอีก type มั้ย?
  2. จากที่เราเห็นข้างบนคำว่า pineapple มันเป็น Type อะไร?
  3. แล้วมันมี Type อื่นๆ อีกมั้ย
นั่งหาข้อมูลอยู่นานว่ามันจะทำยังไงให้เรารู้ว่า มันคือ Number หรือ String หาไปหามาก็เจอ link นี้ บอกว่า Tcl น่ะ มีแค่ String นะแต่ ห๊ะ อะไรนะ มันมีแค่ String!! จริงๆ คือมันไม่ได้มี Number Floating หรือ type หลักๆ ที่เราใช้กันเลย ทุกอย่างจะเป็น String หรือมองว่าเป็น Object ก็ได้ และเวลา มี Operator อะไรมากระทำมันก็จะเปลี่ยนแลงตรงนั้นให้เป็นค่าที่ต้องการเอง ซึ่งก็ตอบข้อ 1. กับ 2. ที่ผมสงสัยได้เลย แต่สงสัยขึ้นมาว่า

"แล้วเราจะตรวจสอบมันยังไง"

เพราะเวลาที่เราต้องมี Data Type เหตุผลส่วนหนึ่งเราต้องการตรวจสอบมันว่าเป็นอะไร หาไปหามาก็เจอ link นี้บอกว่า เราสามารถตรวจสอบได้ด้วยว่ามันคืออะไร โดยใช้

% string is type varName

ยกตัวอย่าง

% set a 5
5
% string is integer $a
1

สังเกตจากข้างบนมันจะ return ได้ออกมาเป็น 1 ซึ่งผมก็เดาไปเรื่อยว่ามันน่าจะใช่ หรือ true ล่ะมั้ง เลยเดาจากคำถามข้อ 1. ว่า floating point มันจะเป็น Data Type ชื่ออะไรโดยเริ่มจาก

% set a 0.1 ; # อันนี้ก็ลองเดาจากประสบการณ์การเขียนภาษาอื่นมา และมันก็ผ่านซะด้วย
0.1
% string is float $a
bad class "float": must be alnum, alpha, ascii, control, boolean, digit, double, entier, false, graph, integer, list, lower, print, punct, space, true, upper, wideinteger, wordchar, or xdigit

อ่าว มันด่ากลับมา T^T แสดงว่า floating point ของ Tcl ไม่ได้เรียกว่า float เอาล่ะงั้นลองไล่อ่านดูจากที่มันบอกล่ะกันว่าจะเป็นอันไหน ซึ่งก็เห็นว่ามันมีคำว่า double ซึ่งดูจะเข้าเค้าสุด

% set a 0.1
0.1
% string is double $a
1

เยส floating point ของ Tcl มันคือ double นั้นเอง แต่เห็นมัน return 1 ออกมาเลยอยากทดสอบดูว่ามันเป็น boolean จริงมั้ยโดย

% set a 1
1
% string is boolean $a
1
% string is true $a
1

"แล้ว Type อื่นล่ะไม่มีเลยจริงๆ เหรอ"

ผมก็ยังข้องใจอยู่ดีว่ามันไม่มีเลยเหรอ Data Type แบบอื่นเนี่ย พออ่านจาก link แรกแล้วก็พบว่ายังมีอีกนะ เช่น
  • Arrays (เห็นมันบอกว่าเป็น String Arrays)
  • Lists
  • Handles
  • Widgets
  • Byte Codes
เขียนหมดนี่คงเยอะไว้ขึ้นหัวข้อหน้าดีกว่า