استفاده از متغیرها

بر خلاف زبان هایی مثل جاوا و سی شارپ، که هنگام تعریف متغیر باید نوع متغیر را هم مشخص می کردیم، در Ruby کافیست که فقط نام متغیر را نوشته و به وسیله علامت مساوی یک مقدار به آن اختصاص دهیم :

 variableName = Value

در مثال زیر نحوه تعریف و مقداردهی متغیرها نمایش داده شده است :

 1: intVar     = 10
 2: floatVar   = 12.5
 3: boolVar    = true
 4: stringVar  = 'Hello World!'
 5: arrayVar   = [1, 5, 8]
 6: symbolVar  = :abc
 7: hashVar    = {'Name' => 'jack', 'family' => 'Scalia', 'Age' => 7}
 8: 
 9: puts "intVar    = #{intVar}"
10: puts "floatVar  = #{floatVar}"
11: puts "boolVar   = #{boolVar}"
12: puts "StringVar = #{stringVar}"
13: puts "arrayVar  = #{arrayVar}"
14: puts "symbolVar = #{symbolVar}"
15: puts "hashVar   = #{hashVar}"
intVar    = 10
floatVar  = 12.5
boolVar   = true
StringVar = Hello World!
arrayVar  = [1, 5, 8]
symbolVar = abc
hashVar   = {"Name"=>"jack", "family"=>"Scalia", :Age=>7}

در خطوط 7-1، متغیر ها تعریف شده اند. اما نوع این متغیرها چیست؟ Ruby نوع متغیرها را بسته به مقداری که به آنها اختصاص داده می شود در نظر می گیرد. مثلا نوع متغیر stringVar در خط 4 از نوع رشته است، چون یک مقدار رشته ای به آن اختصاص داده شده است. به خطوط 5، 6 و 7 کد بالا توجه کنید. در خط 5 یک متغیر تعریف شده است و نوع داده ای که به آن اختصاص داده شده است از نوع array است. همانطور که در درس قبل اشاره شد، برای تعریف array علامت [] به کار می رود و آیتم های داخل آن به وسیله کاما از هم جدا می شوند :

arrayVar = [1, 5, 8]

در خط 6 هم یک متغیر تعریف شده است و یک مقدار از نوع symbol به آن اختصاص داده شده است. symbol ها نه متغیر هستند و نه string هستند بلکه آنها را به عنوان برچسب ها در نظر می گیرند و در هش ها پرکاربرد هستند. در جلسات آینده کاربرد آنها را در هش ها خواهید دید و با علامت دو نقطه (:) نشان داده می شوند. و اما در خط 7 یک نوع hash تعریف شده است. برای تعریف hash بین کلید و مقدار علامت <= و بین کلید/مقدارها هم علامت , قرار می گیرد :

hashVar = {Key1 => Value1, Key2 => Value2, Key3 => Value3}

مثلا در مثال بالا یک hash تعریف کرده ایم که سه آیتم یا کلید/مقدار دارد که بین آنها علامت کاما , قرار داده ایم. ولی بین یک کلید و مقدار مربوط به آن علامت : قرار گرفته است. نکته ای که در خطوط 15-9 کد بالا وجود دارد و بهتر است که در همینجا به آن اشاره شود این است که برای نوشتن نام یک متغیر، کافیست نام آن را در داخل علامت “” بنویسید و اگر بخواهید مقدار متغیر را چاپ کنید باید نام متغیر را در بین {}# بنویسید. مثلا در خط 9 کد بالا :

puts "intVar   =   #{intVar}"

سمت چپ علامت مساوی، باعث چاپ نام متغیر یعنی intVar و سمت راست علامت مساوی باعث چاپ عدد 10، یعنی مقدار متغیر می شود. برای اختصاص یک مقدار به چند متغیر می توان به صورت زیر عمل کرد :

identifier1 =  identifier2 = ... indentifierN = Value

به مثال زیر توجه کنید :

num1 = num2 = num3 = num4 = num5 = 10
message1 = message2 = message3 = "Hello World!"

puts num1
puts num4
puts message1
puts message3
10
10
Hello World!
Hello World!

دقت کنید که برای متغیرهای تعریف شده در حالت بالا یک خانه حافظه تخصیص داده می شود، یعنی مقدار 10 در حافظه ذخیره شده و متغیرهای num1 و num2 و num3 و num4 و num5 به آن خانه از حافظه اشاره می کنند. همچنین می توان چند متغیر را تعریف کرد و برای هر یک از آن ها مقدار جداگانه ای مشخص نمود:

identifier1, identifier2, ... indentifierN = Value1, Value2, ... ValueN

به مثال زیر توجه کنید:

num1, num2, message1 = 10, 12.5, 'Hello World!'

puts num1
puts num2
puts message1
10
12.5
Hello World!

در کد بالا مقدار num1 برابر 10، num2 برابر 12.5 و message1 برابر !Hello World می باشد. در Ruby، متغیر ها هم باید تعریف و هم مقداردهی شوند. یعنی اگر متغیری را تعریف کرده و به آن مقداری را اختصاص ندهید و برنامه را اجرا کنید با خطا مواجه می شوید :

number

puts number
undefined local variable or method `number' for main:Object (NameError)

همانطور که در درس قبل هم اشاره کردیم، یک رشته در اصل یک مجموعه از کاراکترهاست که در داخل علامت “” یا ‘ ‘ قرار دارند. هر کدام از این کاراکترها دارای یک اندیس است که به وسیله آن اندیس قابل دسترسی هستند. اندیس کاراکترها در رشته از 0 شروع می شود. به رشته زیر توجه کنید :

message = 'Hello World!'

در رشته بالا اندیس کاراکتر O برابر 4 است. برای درک بهتر به شکل زیر توجه کنید :

H e l l o   W o r l d  !
0 1 2 3 4 5 6 7 8 9 10 11

حال برای چاپ یک کاراکتر مثلا W از این رشته کافیست که به صورت زیر عمل کنیم :

message = 'Hello World!'

puts message[6]
W

همانطور که در کد بالا مشاهده می کنید کافیست که نام متغیر را نوشته، در جلوی آن یک جفت کروشه و در داخل کروشه ها اندیس آن کاراکتری را که می خواهیم چاپ شود را بنویسیم. چاپ مقدار با استفاده از اندیس در مورد array هم صدق می کند :

arrayVar  = [1, 5, 8]

puts arrayVar[2]
8

و اما در مورد hash، شما باید نام کلید را بنویسید تا مقدار آن برای شما نمایش داده شود:

hashVar = {'Name' => 'jack', 'Family' => 'Scalia', 'Age' => 7}

puts hashVar['Family']
Scalia

نکته ای که بهتر است در همینجا به آن اشاره کنیم این است که کلید/مقدارها در hash می توانند از هر نوعی باشند و شما برای چاپ مقدار مربوط به یک کلید باید نام کلید را دقیق بنویسید. به مثال زیر توجه کنید :

hashVar   = {1 => 'Jack', '2' => 'Scalia', 3 => 7}

puts hashVar['2']
Scalia

در مثال بالا ما مقدار کلید ‘2’ را چاپ کرده ایم. حال اگر به جای ‘2’ عدد 2 را بنویسیم، یعنی علامت کوتیشن را نگذاریم، هیچ خروجی به ما نمایش داده نمی شود :

hashVar = {1 => 'Jack', '2' => 'Scalia', 3 => 7}

puts hashVar[2]