استفاده از متغیرها
بر خلاف زبان هایی مثل جاوا و سی شارپ، که هنگام تعریف متغیر باید نوع متغیر را هم مشخص می کردیم، در 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]