String ในภาษา Ruby

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับ String ในภาษา Ruby เราจะพูดเกี่ยวกับวิธีการประกาศ การนำ String ไปใช้งาน และการดำเนินการกับ String เช่น การเชื่อมต่อ String และการแทนที่ใน String และในตอนท้าย นอกจากนี้เราจะแนะนำให้คุณรู้จักกับเมธอดใน String ด้วย นี่เป็นเนื้อหาที่เราจะพูดในบทนี้

  • การประกาศ String
  • การเชื่อมต่อสตริง String
  • การแทนที่ใน String
  • Escape characters
  • การจัดรูปแบบ String
  • Sequence of characters

การประกาศ String

String เป็นประเภทข้อมูลที่เก็บข้อมูลในรูปแบบข้อความหรือลำดับของตัวอักษร ยกตัวอย่างเช่น ในแอพพลิเคชันส่งข้อความ เราสามารถใช้ String เพื่อเก็บชื่อของคู่สนทนา หรือข้อความที่ส่งหากันได้ และเช่นเดียวกันกับข้อมูลประเภทอื่นๆ ก่อนใช้งานเราจำเป็นต้องประกาศ String ก่อน และนี่เป็นตัวอย่างการประกาศ String ในภาษา Ruby

name = "Mateo"
lang = "Ruby"

ในตัวอย่าง เราได้ประกาศตัวแปร String สองตัวแปร ได้แก่ name มันเป็นตัวแปรที่ใช้สำหรับเก็บชื่อ และตัวแปร lang เป็นตัวแปรที่ใช้สำหรับเก็บชื่อของภาษาเขียนโปรแกรม และเราได้กำหนดค่าให้กับตัวแปรทั้งสองเป็น "Mateo" และ "Ruby" ตามลำดับ

สังเกตว่าค่าของ String นั้นจะต้องล้อมรอบด้วยเครื่องหมาย double quote (") อยู่เสมอ ดังนั้นเราสามารถพูดได้ว่าทุกอย่างที่ล้อมรอบด้วยเครื่องหมาย double quote ในภาษา Ruby นั้นเป็นค่าของ String หรือเรียกว่า String literal นั่นเอง

declare_string.rb
postcode = "1234"
num = 1234

puts postcode.class # => String
puts num.class      # => Integer

ในตัวอย่างถัดมา แสดงให้เห็นว่าตัวแปร postcode นั้นมีประเภทข้อมูลเป็น String นั่นเป็นเพราะว่าเราได้กำหนดตัวอักษร String "1234" ให้กับมัน ส่วนในตัวแปร num นั้นมีประเภทข้อมูลเป็นตัวเลข เนื่องจากตัวเลขที่ไม่ได้ครอบด้วยเครื่องหมาย double quote ดังนั้น 1234 จึงเป็น Number literal

และหลังจากที่เราประกาศตัวแปร String แล้ว เราสามารถนำมันไปใช้งานได้ เช่น นำไปประมวลผลบางอย่าง หรือนำไปแสดงผล เป็นต้น

variable_types.rb
name = "Mateo"
lang = "Ruby"

puts "#{name} is #{lang} programmer"
puts "His name has #{name.length} characters"

ในตัวอย่าง เราได้นำค่าในตัวแปรมาแสดงผลออกหน้าจอ ในการแสดงผลบรรทัดที่สอง คุณจะสังเกตเห็นคำสั่ง name.length เราได้เรียกใช้งานเมธอด length จาก String เพื่อหาความยาวของมัน

Mateo is Ruby programmer
His name has 5 characters

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

String concatenation

การเชื่อมต่อ String (String concatenation) คือการสร้าง String ใหม่จาก String เดิมที่มีอยู่แล้ว ซึ่งในภาษา Ruby นั้นคุณสามารถใช้ตัวดำเนินการ + เพื่อเชื่อมต่อ String เข้าด้วยกันได้ นี่เป็นตัวอย่างการเชื่อมต่อ String ในภาษา Ruby

string_concate.rb
s1 = "Ruby "
s2 = "Language"
s3 = s1 + s2

puts s3
puts s3.length

ในตัวอย่าง เราได้ประกาศตัวแปร String สองตัว และหลังจากนั้นเรานำตัวแปรทั้งสองมาเชื่อมต่อกัน และเก็บไว้ในตัวแปร s3

Ruby Language
13

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

นอกจากนี้ คุณยังสามารถเชื่อมต่อ String ได้หลายๆ ค่าในคำสั่งเดียว โดยการเรียกใช้งานตัวดำเนินการ + ต่อกันไปเรื่อยๆ

string_concate2.rb
name = "Mateo"
lang = "Ruby"
sentence= name + " loves " + lang

puts sentence
puts "He is a " + lang + " programmer"

ในตัวอย่าง เราได้ทำการต่อ String จากทั้งในตัวแปรและจาก String literal เข้าด้วยกันและเก็บไว้ในตัวแปร sentence และแสดงผลตัวแปรดังกล่าวออกมาทางหน้าจอ

puts "He is a " + lang + " programmer"

และในบางครั้ง เราอาจจะทำการต่อ String ไปพร้อมกับการแสดงผลเลยก็ได้ นี่จะทำให้เราไม่ต้องเก็บค่าไว้ในตัวแปรก่อน ในกรณีที่เราไม่ต้องการนำค่าดังกล่าวไปใช้ภายหลังในโปรแกรม ในบทเรียนของเรานั้นคุณจะพบว่าเราทำบ่อย

ข้อควรระวังอย่างหนึ่งในการต่อ String ในภาษา Ruby คือคุณไม่สามารถเชื่อมต่อ String กับตัวเลขได้เหมือนในภาษาอื่นๆ ที่คุณอาจจะคุณเคย ยกตัวอย่างเช่น

string_concate3.rb
name = "Matz"
year = 1995
puts name + " created Ruby in " + year

จากตัวอย่างด้านบน เมื่อคุณรันโปรแกรมก็จะเกิดข้อผิดพลาดขึ้นแบบนี้

Traceback (most recent call last):
        1: from string.rb:3:in `<main>'
string.rb:3:in `+': no implicit conversion of Integer into String (TypeError)

นั่นเป็นเพราะว่าเมื่อคุณพยายามเชื่อมต่อออบเจ็คประเภทอื่นๆ เข้ากับ String (ในกรณีนี้คือตัวเลข Integer) Ruby ไม่ได้มีการแปลงค่าเหล่านั้นเป็น String ให้คุณอัตโนมัติ นั่นหมายความว่าการเชื่อมต่อ String ในภาษา Ruby ออบเจ็คทั้งสองต้องเป็น String เท่านั้น

ดังนั้นจากตัวอย่างที่เกิดข้อผิดพลาดด้านบน เราสามารถแก้ไขมันด้วยวิธีนี้

string_concate4.rb
name = "Matz"
year = 1995
puts name + " created Ruby in " + year.to_s

ในตัวอย่าง เราได้ทำการแปลงค่าของตัวแปร year ให้เป็น String ก่อนด้วยการเรียกใช้งานเมธอด to_s

Matz created Ruby in 1995

หลังจากที่เราได้แปลงค่าของปีให้เป็น String แล้ว เราสามารถนำไปเชื่อมต่อกับ nameได้อย่างปลอดภัยและได้ผลลัพธ์ตามที่เราต้องการ

String interpolation

หลังจากที่คุณได้เรียนเกี่ยวกับการเชื่อมต่อ String ไปแล้วนั้น อย่างไรก็ตาม ในภาษา Ruby มีคุณสมบัติที่เรียกว่า String interpolation หรือการแทนที่ใน String

String interpolation คือวิธีการที่โปรแกรมทำการแทนที่ token ใน String ด้วยค่าของตัวแปรหรือนิพจน์อื่นๆ เพื่อสร้าง String ใหม่ออกมา ซึ่งในบทเรียนของเรา คุณได้เห็นตัวอย่างการใช้งานการแทนที่ใน String มาบ้างแล้ว นี่เป็นตัวอย่าง

string_interpolate.rb
site = "marcuscode"
color = "blue"
puts "#{site}'s color is #{color}"

lang = "Ruby"
year = 2020
puts "#{lang} is my favorite language in #{year}"

a = 2
b = 3
puts "Result of #{a} + #{b} is #{a + b}""

จากตัวอย่างการแทนที่ String ในรูปแบบต่างๆ ในกระบวนการทำงานของมันนั้น Ruby จะทำการตรวจหา token ภายใน String ที่มีรูปแบบเป็น #{expression} โดยที่ expression นั้นสามารถเป็นตัวแปร Literal หรือนิพจน์ที่เกิดจากตัวดำเนินการก็ได้ เมื่อ Ruby พบกับ token ดังกล่าวมันพยายามเรียกใช้เมธอด to_s บนออบเจ็คเหล่านั้นเพื่อแปลงค่าเป็น String ก่อนการแทนที่ลงไป

marcuscode's color is blue
Ruby is my favorite language in 2020
Result of 2 + 3 is 5

นี่เป็นผลลัพธ์การทำงานของโปรแกรม สังเกตว่าจากการแทนที่ใน String นั้นเราไมจำเป็นต้องกังวลกับประเภทข้อมูลของ token ที่เราใส่ไว้ใน String ซึ่ง Ruby พยายามแปลงข้อมูลดังกล่าวเป็น String อัตโนมัติ ถ้าหากมันเป็นไปได้

Escape characters

Escape character คือการที่เราใส่เครื่องหมาย Backslash (\) หน้าตัวอักษรพิเศษบางตัวเพื่อแสดงถึงตัวอักษรเหล่านั้นใน String literal ยกตัวอย่างเช่น \n หมายถึงการขึ้นบรรทัดใหม่ \t หมายถึงแท็บ หรือ \" หมายถึงตัวอักษร double quote เอง

เนื่องจากใน String literal นั้นเราใช้ตัวอักษร double quote กำหนดของเขตของ String คุณอาจจะมีคำถามว่า ถ้าหากเราต้องการกำหนดตัวอักษร double quote ให้เป็นค่าของ String จะต้องทำอย่างไร คำตอบก็คือการใช้ Escape character อย่างที่เราได้กล่าวไปนั่นเอง นี่เป็นตัวอย่าง

puts "Be the \"ONE\""

ในตัวอย่าง เราได้สร้าง String ที่สามารถอ่านได้ความว่า "Be the one" และเราต้องการใส่เครื่องหมาย double quote ครอบคำว่า ONE ด้วย ดังนั้นเราจำเป็นต้องทำการ escape ตัวอักษร double quote เพื่ออ้างถึงตัวอักษรดังกล่าว

Be the "ONE"

นี่เป็นผลลัพธ์การทำงานของโปรแกรม ในตอนนี้เราสามารถกำหนดเครื่องหมาย double quote ให้เป็นส่วนหนึ่งของ String ได้ด้วยการใช้ Escape character

ต่อมาเป็นตัวอย่างการใช้ Escape character อื่นๆ ที่ใช้บ่อย เช่น ตัวอักษรแท็บ (\t) หรือการขึ้นบรรทัดใหม่ (\n)

escape_character.rb
puts "NAME\tLANGUAGE"
puts "Mateo\tRuby"
puts "Ben\tPython"
puts "Jacob\tJava"

print "\n"
print "One\nTwo\nThree"

ในตัวอย่าง เป็นการแสดงข้อมูลในรูปแบบตารางโดยการใช้แท็บ (\t) เข้ามาช่วยจัดการแสดงผลเพื่อให้การเว้นวรรคระหว่างคอลัมน์ในแต่ละแถวตรงกัน ในทางปฎิบัติคุณสามารถพิมพ์แท็บเข้าไปใน String โดยตรงได้ แต่นั่นเป็นเรื่องที่ควรทำเพราะมันอาจจะสร้างความสับสนกับการเว้นวรรคได้

print "One\nTwo\nThree"

ในบรรทัดสุดท้าย เป็นการใช้งานตัวอักษรขึ้นบรรทัดใหม่ (\n) เนื่องจากเราต้องการให้ String ของเรามีการขึ้นบรรทัดใหม่ระหว่างตัวเลข ดังนั้นเราจึงต้อง escape มันด้วย \n นั่นทำให้ทุกๆ ครั้ง Ruby พบกับ \n ใน String literal มันจะถูกตีความเป็นการขึ้นบรรทัดใหม่นั่นเอง

และอย่างที่คุณรู้ เราไม่สามารถพิมพ์ Enter เข้าไปโดยตรงใน String literal หรือในโค้ดได้ เพราะ Ruby ใช้การขึ้นบรรทัดใหม่เป็นตัวแบ่งคำสั่งของโปรแกรมนั่นเอง

NAME    LANGUAGE
Mateo   Ruby
Ben     Python
Jacob   Java

One
Two
Three

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

จากในตัวอย่างนั้นเป็นเพียงการใช้งาน Escape character เพียงส่วนหนึ่งเท่านั้น สำหรับรายการของ Escape character ทั้งหมด คุณสามารถดูเพิ่มเติมได้ที่ บทการรับค่าและการแสดงผล ในภาษา Ruby

String formatting

การจัดรูปแบบ String ในภาษา Ruby นั้นใช้รูปแบบของการจัดรูปแบบ String เหมือนกับภาษา C เพื่อสร้าง String ใหม่จากรูปแบบที่ต้องการ โดยการใช้ตัวกำหนดรูปแบบ (Specifier) ที่เป็นสัญลักษณ์พิเศษ % เพื่อกำหนดรูปแบบของ String ที่ต้องการ เช่น %d แสดงถึงค่าของตัวเลข %f แสดงถึงค่าของตัวเลขทศนิยม หรือ %s แสดงถึงค่าของ String เอง

format_string % [args]

โดยที่ format_string นั้นเป็นรูปแบบ String ที่สามารถมีได้ทั้งตัวกำหนดรูปแบบ (Specifier) และ String ปกติอยู่ภายใน และ args นั้นเป็นอาเรย์ของอาร์กิวเมนต์สำหรับตัวกำหนดรูปแบบที่เราได้กำหนดไว้ในรูปแบบ String

และนี่เป็นตารางของตัวกำหนดรูปแบบในภาษา Ruby อย่างไรก็ตามนี่เป็นเพียงส่วนหนึ่งเท่านั้นที่เราได้รวบรวมมา เนื่องจากตัวกำหนดรูปแบบเป็นจำนวนมากที่อาจจะไม่ได้ใช้บ่อยนัก

ตัวจัดรูปแบบ คำอธิบาย
%b แปลงอาร์กิวเมนต์เป็นตัวเลขฐานสอง
%d แปลงอาร์กิวเมนต์เป็นตัวเลขจำนวเต็ม
%o แปลงอาร์กิวเมนต์เป็นตัวเลขฐานแปด
%x แปลงอาร์กิวเมนต์เป็นตัวเลขฐานสิบหก
%e แปลงอาร์กิวเมนต์เป็นตัวเลขทศนิยมในรูปแบบของเอ็กซ์โปเนนเชียล
%f แปลงอาร์กิวเมนต์เป็นตัวเลขทศนิยม
%g แปลงอาร์กิวเมนต์เป็นตัวเลขทศนิยม ที่มีความละเอียดน้อยกว่า
%c แปลงอาร์กิวเมนต์เป็นรหัสแอสกีของตัวอักษร
%s แปลงอาร์กิวเมนต์เป็น String
%p แปลงอาร์กิวเมนต์ค่าจากเมธอด inspect

หลังจากที่คุณได้เห็นตัวจัดรูปแบบในตารางด้านบนแล้ว ต่อไปมาดูตัวอย่างการจัดรูปแบบ String ในภาษา Ruby กัน

string_format1.rb
name = "Mateo"
height = 5.83
money = 3

puts "Name: %s" % name
puts "Height: %f feet\nMoney: $%d USD" % [height, money]

และนี่เป็นผลลัพธ์การทำงานของโปรแกรม

Name: Mateo
Height: 5.830000 feet
Money: $3 USD

ในตัวอย่าง เราได้ประกาศตัวแปรสามตัวและกำหนดค่าให้กับตัวแปรเหล่านั้นเป็น String ตัวเลขจำนวนเต็ม และตัวเลขทษนิยม ตามลำดับ หลังจากนั้นเราแสดงค่าของตัวแปรเหล่านี้ออกมาด้วยวิธีการจัดรูปแบบ String

puts "Name: %s" % name

และอย่างที่คุณได้เห็น เราใช้ตัวกำหนดรูปแบบ %s สำหรับตัวแปร name การทำงานนี้จะคล้ายกับการแทนที่ใน String ที่คุณได้เรียนไปก่อนหน้า แต่การทำงานของการจัดรูปแบบ String จะแปลงค่าอาร์กิวเมนต์ให้เป็นประเภทข้อมูลที่เรากำหนดในตัวกำหนดรูปแบบ

puts "Height: %f feet\nMoney: $%d USD" % [height, money]

และในกรณีที่รูปแบบ String นั้นมีตัวกำหนดรูปแบบมากกว่าหนึ่งตัวอยู่ภายใน เราจำเป็นต้องส่งอาร์กิวเมนต์เป็นอาเรย์แทน สังเกตว่าในบรรทัดนี้เราได้กำหนด %f และ %d ให้อยู่ใน String เดียวกัน และการแทนที่จะเกิดขึ้นตามลำดับ นั่นคือ %f จะถูกแทนที่จะถูกแทนที่ด้วยค่าในตัวแปร height และ %d ถูกแทนที่ด้วยค่าในตัวแปร money ตามลำดับ

สำหรับตัวกำหนดรูปแบบบางตัว ยกตัวอย่างเช่น %d หรือ %f นั้นเราสามารถกำหนด flag พิเศษเพื่อจัดรูปแบบตามที่ต้องการได้ มาดูตัวอย่างกัน

string_format2.rb
puts "%.8d" % 1233
puts "%.6d" % 123
puts "%.4f" % 3.14159
puts "%.2f" % 3.14159

puts "%8d" % 123
puts "%8f" % 3.14159
puts "%8s" % "Ruby"

ในตัวอย่าง สำหรับตัวกำหนดรูปแบบ %d ถ้าหากเราใส่จุดและตัวเลขจำนวนเต็มระหว่าง % และ d นั่นจะเป็นการกำหนดความกว้างให้กับ String และเติมตัวอักษรศูนย์ (0) ใส่ด้านหน้าเพื่อให้เต็มกับความกว้างที่กำหนด แต่ถ้าหากเราทำแบบนี้กับตัวกำหนดรูปแบบ %f จะเป็นการกำหนดจำนวนเลขหลังจุดที่ต้องการจะแสดงแทน

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

00001233
000123
3.1416
3.14
     123
3.141590
    Ruby

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

การกำหนด flag ให้กับตัวกำหนดรูปแบบนั้นมียังอีกหลายอย่างที่สามารถทำได้ อย่างไรก็ตาม ผลลัพธ์การทำงานจะแตกต่างกันออกไปตามตัวกำหนดรูปแบบนั้นๆ ซึ่งเราจะไม่ได้พูดถึงทั้งหมดในบทเรียนนี้

และนอกจากนี้ ยังมีสิ่งหนึ่งที่น่าสนใจเกี่ยวกับการจัดรูปแบบ String คือเราสามารถยังคับให้อาร์กิวเมนต์แสดงในประเภทข้อมูลที่ต้องการได้ ยกตัวอย่างเช่น

string_format3.rb
apple = 3
cost = 123.34

puts "I have %f apples" % apple
puts "It costs around $%d USD" % cost

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

I have 3.000000 apples
It costs around $123 USD

ในตัวอย่างนี้ แสดงให้คุณเห็นว่าเราสามารถใช้ตัวกำหนดรูปแบบของข้อมูลประเภทหนึ่ง กับข้อมูลอีกประเภทได้ เช่น เราต้องการแสดงจำนวนของแอปเปิ้ลในรูปแบบของเลขทศนิยม เราเพียงแค่ %f และในขณะเดียวกัน เราเพียงแค่ต้องการแสดงราคาโดยประมาณของแอปเปิ้ลที่เป็นตัวเลขจำนวนเต็มเท่านั้น เราแค่ใช้ตัวกำหนดรูปแบบเป็น %d ซึ่งการแปลงจะเกิดขึ้นอัตโนมัติตามตัวกำหนดรูปแบบที่เราใช้ ไม่สำคัญว่าประเภทข้อมูลของอาร์กิวเมนต์จะเป็นอย่างไร

อย่างไรก็ตาม ไม่ใช่ออบเจ็คทุกประเภทที่จะสามารถแปลงไปยังข้อมูลประเภทอื่นได้ ยกตัวอย่างเช่นโค้ดดังต่อไปนี้

string_format3.rb
puts "This year %s" % 2020
puts "Convert to number: %d" % "Ruby"

ในตัวอย่าง บรรทัดแรกเราได้จัดรูปแบบให้ตัวเลขนวนเต็ม 2020 ให้แสดงผลเป็น String ซึ่งนี่ไม่มีปัญหาอะไรเพราะเราสามารถแปลงตัวเลขให้เป็น String ได้อยู่แล้ว แต่ในบรรทัดทีสอง ค่าอาร์กิวเมนต์คือ "Ruby" ในขณะที่ตัวกำหนดรูปแบบคือ %d ดังนั้นเมื่อเรารันโปรแกรมจึงทำให้เกิดข้อผิดพลาด ArgumentError

This year 2020
Traceback (most recent call last):
        1: from string.rb:2:in `<main>'
string.rb:2:in `%': invalid value for Integer(): "Ruby" (ArgumentError)

นั่นเป็นเพราะว่า "Ruby" ไม่สามารถแปลงเป็นตัวเลขได้นั่นเอง และก็ไม่มีเหตุผลอะไรที่เราจะทำเช่นนั้น เพราะว่าสุดท้ายแล้วผลลัพธ์จากการจัดรูปแบบ String จะเป็น String เสมอ

สำหรับตัวกำหนดรูปแบบและ flag ทั้งหมดคุณสามารถดูเพิ่มเติมได้ที่เอกสารการใช้งานเมธอด Kernel.sprintf ของภาษา Ruby ที่ https://ruby-doc.org/core-2.7.0/Kernel.html#method-i-sprintf

Sequence of characters

String เป็นข้อมูลประเภทตัวอักษรที่เรียงต่อกัน ซึ่งในเบื้องหลังการทำงานแล้ว Ruby เก็บค่าของ String เป็นอาเรย์ของตัวอักษร นั่นหมายความว่าเราสามารถเข้าถึงตัวอักษรที่ตำแหน่งใดๆ ของ String ผ่านทาง Index ได้เหมือนกับอาเรย์ปกติรวมถึงใช้วิธีการ Slice กับ String ด้วย

character1.rb
a = "marcuscode.com"
puts a[0]               # First index
puts a[-1]              # Last index
puts a[0] + a[2] + a[4] # Even indexes
puts a[6,4]             # Slicing
puts a[6..9]            # Range index

ในตัวอย่าง เราได้ประกาศตัวแปร a ซึ่งมีค่าเป็น "marcuscode.com" และอย่างที่เราได้บอกไปว่า String นั้นเป็นอาเรย์ของตัวอักษร เราสามารถเข้าถึงสมาชิก (ตัวอักษร) ของมันได้ผ่านทางอาเรย์ ผ่านการ Slice หรือจาก Range ได้ อย่างไรก็ตาม คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการดำเนินการเหล่านี้ได้ในบทของอาเรย์

m
m
mru
code
code

นี่เป็นผลลัพธ์การทำงานของโปรแกรม เราได้เข้าถึงตัวอักษรภายใน String ผ่านทาง Index ของมันและแสดงผลออกมาทางหน้าจอ

เนื่องจาก String นั้นสามารถเข้าถึงได้ผ่านทาง Index นั่นหมายความว่าเราสามารถใช้คำสั่งวนซ้ำเพื่อวนอ่านค่าในตัวแปร String เราจะเขียนโปรแกรมสำหรับนับว่ามีสระกี่ตัวใน String นี่เป็นโค้ดของโปรแกรมดังกล่าว

character2.rb
str = "marcuscode.com"
count = 0

for i in (0..str.length)
    if ["a", "i", "e", "o", "u"].include?(str[i])
        count = count + 1
    end
end

puts "There are #{count} vowels in \"#{str}\""

ในตัวอย่าง เราได้เขียนโปรแกรมสำหรับนับจำนวนสระที่ปรากฎในตัวแปร str โดยการใช้คำสั่ง for loop วนอ่านค่าแต่ละตัวอักษรใน String นั่นทำให้เราสามารถเข้าถึงแต่ละตัวอักษรในแต่ละรอบได้ผ่านทาง str[i]

if ["a", "i", "e", "o", "u"].include?(str[i])
    count = count + 1
end

หลังจากนั้นเรานำตัวอักษรแต่ละตัวมาเปรียบเทียบว่ามันเป็นสระหรือไม่ โดยการเรียกใช้เมธอด include? เพื่อตรวจสอบกับอาเรย์ของสระที่มี และถ้าตัวอักษร str[i] นั้นเป็นหนึ่งในตัวอักษรที่อยู่ในอาเรย์ เราจะทำการเพิ่มค่าตัวนับในตัวแปร count และเมื่อจบการทำงานของ loop เราจะได้จำนวนสระที่นับได้

There are 5 vowels in "marcuscode.com"

นี่เป็นผลลัพธ์การทำงานของโปรแกรม เราได้แสดงจำนวนสระที่เรานับได้ออกมาทางหน้าจอพร้อมกับ String ต้นฉบับ

จากตัวอย่างด้านบน นี่เป็นอีกเวอร์ชันหนึ่งของโปรแกรมนับสระใน String ซึ่งให้ผลลัพธ์เช่นเดียวกัน

character3.rb
str = "marcuscode.com"
count = 0

str.each_char { |ch|
    if "aieou".include?(ch)
        count = count + 1
    end
}

puts "There are #{count} vowels in \"#{str}\""

ในตัวอย่างนี้ เราได้ใช้เมธอด each_char ในการวนอ่านค่าแต่ละตัวอักษรใน String แต่ละรอบที่ตัวอักษณถูกอ่านมันจะถูกส่งค่าเข้าไปยังบล็อคผ่านทางตัวแปร ch

if "aieou".include?(ch)
    count = count + 1
end

ภายในบล็อค เราได้นำค่าแต่ละตัวอักษรมาเปรียบเทียบกับ String "aieou"ด้วยเมธอด include? ว่าค่าในตัวแปรเป็นส่วนหนึ่งของ String ดังกล่าวหรือไม่ นี่เป็นอีกวิธีหนึ่งที่เราสามารถทำได้ และถ้าหากค่าในตัวแปร ch เป็นส่วนหนึ่งของ "aieou" ก็หมายความว่ามันเป็นสระนั่นเอง หลังจากนั้นเราเพิ่มค่าในตัวแปร count เช่นเดิม

ในตัวอย่างที่สอง เราเพียงแค่ต้องการแสดงการใช้งานเมธอดใน String เท่านั้น อย่างไรก็ตาม Ruby มีเมธอดของ String เป็นจำนวนมากที่เราสามารถใช้ได้ โดยไม่ต้องเขียนโค้ดเอง สำหรับการใช้งานเมธอดของคลาส String คุณจะได้เรียนรู้ในบทต่อไป

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับ String ในภาษา Ruby เราได้พูดถึงการประกาศและใช้งาน String และนอกจากนี้ เรายังพูดถึงการเชื่อมต่อ การแทนที่ และการจัดรูปแบบ String ซึ่งนั่นสามารถช่วยให้เราสามารถเขียนโปรแกรมจัดการกับ String ได้ง่ายมากขึ้น