2. ตัวอักษร
www.tanabutr.co.th/photobook
เราเรียนเรื่องเกี่ยวกับตัวเลขไปแล้ว, แล้วตัวอักษรล่ะ? คำ? เท็กซ์?
เราเรียกกลุ่มตัวอักษรในโปรแกรมว่าสตริงก์ (strings). (ให้คุณนึกถึงตัวอักษรที่นำมารวมกันบนป้าย) เพื่อที่จะให้ดูสตริงก์ง่ายขึ้นในโค้ด, ผมจะใช้สีแดง. ต่อไปนี้เป็นตัวอย่างของสตริงก์:
'Hello.' 'Ruby rocks.' '5 is my favorite number... what is yours?' 'Snoopy says #%^?&*@! when he stubs his toe.' ' ' ''
จากที่คุณได้เห็น, ในสตริงก์สามารถมีเครื่องหมายวรรคตอน, ตัวเลข, เครื่องหมายพิเศษ, และช่องว่าง มากกว่าที่จะเป็นตัวอักษรธรรมดา. สตริงก์ตัวสุดท้ายไม่มีอะไรเลย; เราเรียกว่าสตริงก์ว่างเปล่า (empty string).
เราได้ใช้ puts ในการแสดงตัวเลขทางหน้าจอไปแล้ว; เรามาลองกับสตริงก์ดู:
puts 'Hello, world!' puts '' puts 'Good-bye.'
Hello, world! Good-bye.
มันทำงานได้ดีกับสตริงก์ด้วย. ตอนนี้ก็ให้คุณลองดูด้วยตัวเองบ้าง.
เลขคณิตกับสตริงก์
คุณสามารถคำนวณเลขคณิตบางอย่างกับสตริงก์ได้เช่นเดียวเหมือนกับที่ทำกับตัวเลข! เช่นการรวม (บวก) สตริงก์. เราลองมาบวกสตริงก์สองตัวและดูผลลัพธ์ของ puts ดู:
puts 'I like' + 'apple pie'
I likeapple pie.
โอ้! ผมลืมใส่ช่องว่างระหว่าง 'I like' กับ 'apple pie'. ปรกติแล้วช่องว่างในโปรแกรมไม่มีความสำคัญ, แต่จะมีความสำคัญเมื่ออยู่ในสตริงก์. (มันเป็นความจริงที่ว่า: คอมพิวเตอร์ไม่ทำสิ่งที่คุณต้องการให้ทำ, จะทำในสิ่งที่คุณบอกให้มันทำเท่านั้น) เรามาลองดูกันอีกที:
puts 'I like ' + 'apple pie.' puts 'I like' + ' apple pie.'
I like apple pie. I like apple pie.
(เหมือนกับที่คุณเห็น, มันไม่สำคัญว่าคุณจะใส่ช่องว่างให้กับสตริงก์ตัวไหน)
คุณสามารถเอาสตริงก์มาบวกกัน, และยังสามารถคูณได้ด้วย! (ต้องคูณกับตัวเลขนะ) ดูตรงนี้
puts 'blink ' * 4
batting her eyes (วูบวาบตา)
(ล้อเล่น, จริงแล้วผลลัพธ์ออกมาแบบนี้)
blink blink blink blink
ถ้าคุณลองคิดให้ดี, มัน make sense มากนะที่ผลเป็นแบบนี้. 7*3 หมายถึง 7+7+7, ดังนั้น 'moo' * 3 ก็หมายถึง 'moo'+'moo'+'moo'
12 กับ '12'
ก่อที่เราจะไปต่อไป, เราต้องแน่ใจก่อนว่าเราเข้าใจความแตกต่างระหว่างตัวเลข (number)และสัญลักษณ์ตัวเลข (digit). 12 คือตัวเลข, ส่วน '12' เป็นสตริงก์ที่เกิดจากสัญลักษณ์ตัวเลขสองตัว.
เราลองมาเล่นดูอีกสักครู่.
puts 12 + 12 puts '12' + '12' puts '12 + 12'
24 1212 12 + 12
แล้วแบบนี้หละจะเป็นอย่างไร
puts 2 * 5 puts '2' * 5 puts '2 * 5'
10 22222 2 * 5
ตัวอย่างเหล่านี้ตรงไปตรงมา. อย่างไรก็ตามถ้าคุณไม่ระวังให้ดีเวลาที่คุณผสมสตริงก์กับตัวเลขละก็คุณจะเจอกับ...
ปัญหา
พอถึงจุดนี้แล้วคุณอาจจะลองบางอย่างที่ไม่เวิร์ก, หรือถ้ายังไม่เจอก็นี่อันนี้แหละ
puts '12' + 12 puts '2' * '5'
#<TypeError: can't convert Fixnum into String>
อืม... error message. ปัญหาึคือคุณไม่สามารถเอาตัวเลขไปบวกกับสตริงก์, หรือเอาสตริงก์ไปคูณกับสตริงก์. มันไม่ make sense ซึ่งก็เหมือนกับ
puts 'Betty' + 12 puts 'Fred' * 'John'
ซึ่งที่ต้องระวังนอกเหนือจากนี้คือ คุณสามารถเขียน 'pig' * 5 เพราะหมายถึงเอาคำว่า 'pig' มาต่อกัน 5 ครั้ง. แต่คุณไม่สามารถเขียน 5 * 'pig' เพราะจำนวน 5, 'pig' ครั้งมันไม่ make sense.
สุดท้ายนี้, ถ้าคุณต้องการให้โปรแกรมพิมพ์ You're swell!? คุณลองแบบนี้ก็ได้
puts 'You're swell!'
มันไม่เวิร์ก. ผมไม่พยายามที่จะลองมันด้วย. คอมพิวเตอร์มันคิดว่าสตริงก์ที่เราเขียนมันจบแล้ว (นี่ก็เป็นเหตุผลว่าทำไมมันเป็นสิ่งที่ดีถ้าบรรณาธิกรณ์จะทำ syntax ให้เป็นสีให้คุณ) แล้วจะทำให้คอมพิวเตอร์รู้ได้อย่างไรว่าสตริงก์อันนั้นมันยังไม่จบ? เราต้อง escape ตัว apostophe แบบนี้
puts 'You\'re swell!'
You're swell!
เครื่องหมาย backslash เป็นตัว escape character. พูดอีกแบบหนึ่งก็คือ, ถ้าคุณเขียนเครื่องหมาย backslash นำหน้าตัวอักษร, บางครั้งมันจะแปลงเป็นตัวอักษรตัวใหม่ตัวอื่น. สิ่งที่ backslash มัน escape คือเครื่องหมาย apostophe กับ backslash ตัวมันเอง (ถ้าคุณคิดให้ดีก็จะเห็นว่า escape character ต้อง escape ตัวมันเองเสมอ) มีตัวอย่างให้ดูนิดหน่อยดังนี้
puts 'You\'re swell!' puts 'backslash at the end of a string: \\' puts 'up\\down' puts 'up\down'
You're swell! backslash at the end of a string: \ up\down up\down
เพราะว่า backslash ไม่ escape ตัวอักษร 'd' แต่มัน escape ตัวมันเอง, สตริงก์สองตัวหลังในตัวอย่างจึงออกมาเหมือนกัน. ในโค้ดมันดูไม่เหมือนกัน, แต่ในคอมพิวเตอร์มันดูเหมือนกัน.
ถ้าคุณมีคำถาม, ให้อ่านต่อไป! ผมไม่สามารถตอบคำถามทุกอย่างในหน้านี้.