آموزش روبی 1 - متغیر ها

ruby
tutorial

#1

متغیر ها

متغییر ها در دنیای برنامه نویسی به این صورت هستند که مثلا شما مغازه دارین و میخواین برای همسایه یکم سیب زمینی بفرستین . پس از اونجایی که سیب زمینی ها رو نمیشه تک به تک به همسایه مون داد . باید از یک گونی یا یک کیسه پلاستیکی (برای حفظ محیط زیست از پلاستیک تا حد امکان استفاده نکنید :no_mouth: ) استفاده کنیم . پس میایم گونی سیب زمینی رو پر میکنیم و به شاگرد میدیم تا ببره .

خب اینجا گونی نقش متغییر رو داره و سیب زمینی ها نقش داده های ما .

متغییر ها میتونن انواع مختلفی داشته باشن یعنی انواع مختلفی رو میتونن در خودشون ذخیره کنند که بعدا در موردشون بحث میکنیم .

  1. Words (also called strings)
  2. Integers
  3. Methods
  4. Collections

پیاده سازی کد ها در متغیر

بیاین الان به جای گزاشتن سیب زمینی ها تو گونی خودمون . اسممون رو توی متغییر بزاریم .
چطوری میتونیم انجامش بدیم؟ خب آسونه فقط باید به این شکل عمل کنید .

name = "taher"

پس این نقش یک سیب زمینی تو گونیمون هست . حالا میتونیم سیب زمینی های بیشتری رو بندازیم تو گونی . برای اون کار هم باز آسونه با این روش

array = ["taher","mesal1","mesal2","mesal3"]

که این روش رو بهش میگن آرایه ها که بعدا در موردش مفصل صحبت خواهیم کرد .

از آن جایی که میبینید روبی از لحاظ سینتکسی (syntax) یک زبان بسیار ساده و زیبایی هست . و همچنین لازم نیست بعد از هر خط کد ; بزارید و همچنین دیتا تایپ (data-type) رو مشخص کنید . (در مورد دیتا تایپ حرف خواهیم زد ) . چون روبی یک زبان JIT هستش (just-in-time) و هنگام تفسیر کد خودش به صورت اتوماتیک همه چیز رو تشخیص میده.

چاپ کردن در کنسول روبی

استفاده کردن از puts

برای چاپ کردن یک متن و خروجی گرفتن میتونیم از دستور puts استفاده کنیم حال بیاین اولین کد خودتون رو بنویسید :grin:

puts "taher"

و وقتی این دستور رو اجرا کردید خروجی رو به شکل taher خواهید داشت .

استفاده کردن از p

روش دیگری نیز هست که با دستور p شکل میگیره که اونم میتونید استفاده کنید

p "taher"

با خودتون الان فکر میکنید که فرق p با puts چیه ؟
فرقشون در اینه که puts چیزی به شما بر نمیگردونه و صرفا چاپ میکنه ولی p به شما علاوه بر چاپ کردن همون مقدار رو برمیگردونه . خب این یعنی چی؟
بیاین این تصویر رو ببینیم.


یه فرق دیگه هم در پردازش آرایه ها داره که اگه شما یک آرایه رو با puts چاپ کنید. برای شما آرایه iterate میشه یعنی مقدار آرایه به صورت تک شمرده میشه و چاپ میشه . به این صورت .

ولی با دستور p همانگونه که نوشته شده , مقدارش همان گونه برگشت داده میشه.

پس حالا که تفاوتشون رو دونستید . بهتره که هر کدومشون رو در جای مناسب خودش استفاده کنید .


گرفتن ورودی از کنسول با دستورات gets و chomp

شما چاپ کردن خروجی رو یاد گرفتید پس الان نوبت گرفتن داده از کاربرا هست . حال ما , با سوال چند سالته شروع میکنیم .
پس برای کاربر مینویسیم :

puts "how old are you"
age = gets
p age

خب الان چیشد؟ خیلی راحت اول ما اومدیم یه دستور چاپ کردیم . و پرسیدیم اسمت چیه؟
بعدش با استفاده از دستور gets یک ورودی ازش خواستیم و اونو تو متغیر ریختیم تا بعد ازش استفاده کنیم .
و بعد متغییر رو چاپ کردیم . ولی الان یه چیزی مشاهده میکنیم .

میبینیم که آخر خروجیمون یه علامت /n اومده . حالا اون چیکار میکنه اونجا؟ باید بگم که شما نوشتیدش .
تعجب نکنید وقتی که سن تون رو وارد کردید و بعد enter رو زدید , اون enter یک /n رو مینویسه . و برای اینکه space اخرش رو حذف کنیم تا فقط سن مون وارد متغییر بشه . باید اخر gets یک متد chomp بنویسیم تا اون /n اخری یا همون space حذف بشه .
به این صورت

puts "how old are you"
age = gets.chomp
p age

و الان خروجی درست نمایش داده خواهد شد


Variable scope and variable types

در این بخش نیز ما یاد خواهیم گرفت که چطور از انواع دیتاتایپ ها در جاهای مناسب خودش استفاده کنیم.
و همچنین variavle scope چطور کار میکند نیز بحث خواهیم کرد .

ما در روبی 5 دیتاتایپ محتلف داریم که به این صورت هستند:

  1. Local variables
  2. Global variables
  3. Instance variables
  4. Constants
  5. Class variables

Local variables

متغییر های local به متغییر های گفته میشه در کجا که تعریف شود در همان جا قابل استفاده خواهد بود . این یعنی چی؟ خب به این مثال دقت کنید

5.times do 
  a = 10
  p a  
end

حالا این کد رو اجرا کنید . و میبینید که 10 بار عدد 10 تکرار خواهد شد .

5.times do 
  a = 10
end

p a  

و حالا این کد رو امتحان کنید . و شما با خطا مواجه خواهید شد . با خود فکر میکنید که چرا ؟ جواب سادست . چون شما متغییر a را در داخل یک حلقه تعریف کرده اید ولی چاپ متغییر a رو بیرون از حلقه انجام داده اید .
پس ما از اینجا میفهمیم که local variable یا متغییر داخلی فقط در scope یا فضایی که تعریف شده است قابل استفاده خواهد بود . حالا scope هم طبق مثال بالایی فضا و یا مکانی است که بین یک متد یا حلقه یا هر دستوری است که اغاز و پایان مشخصی دارد .
یا به طور ساده در مثال بالایی do اغازگر یک scope و end پایانگر یک scope مشخصی است . لازم به ذکر است که در فایل ما scope و یا فضا های متفاوتی با بالارفتن حجم خط کد خواهیم داشت .

Global variables

global variable یا همون متغیر های جهانی متغییر هایی هستند که در همه جای اپلیکیشن میتونند استفاده شوند . شاید این به گوش ادم خوب بنظر برسه ولی استفاده کردن از ان زیاد ایده جالبی نیست .
برای تعریف global variable ها کافیه اول متغییر علامت $ رو بزارید . به این صورت .

$name = "taher"

بالا گفتم که استفاده کردن از این متغیر ها چنان هم ایده خوبی نیست ، با خود فکر میکنید چرا؟ چون عرضم به خدمت با سعادتون که فرض کنید که شما یک پروژه رو چند نفری توسعه میدید . و شما یک فایلی میسازد و توش از متغیر جهانی به اسم name$ استفاده میکنید و توش اسم خودتونو مینویسید و بعدش از اونطرف عضو دیگه تیمتون هم از اونجایی که ربات نیست و فعلا ادمیزاده ، میاد تو فایل خودش و تو کد هاش اونم از متغییر گلوبال name$ استفاده میکنه و مقادیرشو به اسم خودش تغییر میده . و میاید در اخر میبینید بوووم . حالا این یه مثال ساده و بی ضرر بود ولی فرض کنید مقدار متغییر چیز باارزشی میبود . انوقت …!

Instance variables

اول اینکه برای ساختن instance variable لازمه که به جای قرار دادن $ در متغییر قبلی از @ استفاده کنید . برای مثال name@ .
خب حالا این متغییر چی کار میتونه انجام بده ؟
این متغییر در فریمورک rails به خاطر ماهیت مدل mvc بیشتر دیده میشه . حال فرض کنید در یک کلاس (بعدا گفته میشه کلاس و متد چی هستن) چند تا متد دارید و در یک متد، از متغیر instance استفاده میکنید . و اگر در یک متغیر از کلاس یک فایل که دارای مدل mvc است از متغییر instance استفاده کنید ، دیگر نمیتونید در متد های دیگر اون کلاس ، بهش دسترسی پیدا کنید . حالا تو ذهنتون میگید اینکه همون متغییر local هست و چه فرقی داشت .؟ فرق داره ، فرقشم اینجاست که درسته در متد های دیگر این کلاس بهش دسترسی ندارید ولی در عوض، در فایل دیگر پروژتون یعنی برای مثال view میتونید به اون متغییر دسترسی پیدا کنید . (در ریلز و اینده بیشتر متوجهش میشید)

Constants

اگر شما به زبان های دیگری اشنایی دارید میدونید که عموما Constants ها در طول اپلیکیشن قابل تغییر نیستند و عموما به صورت capital هستند . ولی در روبی شرایط یکم فرق داره .
در روبی اخرین مقداری که وارد Constants شده مورد قبول هستش یعنی اگر ما ابتدا

CITY = "maku"

بنویسیم و بعد

CITY = "tehran"

بنویسیم ، اخرین مقداری که وارد CITY شده قابل قبول هست . لازم به ذکر است که مقدار constants هنگام تغییر با یک notice همراه است و همچنین تغییر دادن constants یک عملکرد به اصطلاح poor programming است و انجام ندادن ان بهتر از انجام دادنش است .

Class variables

متغییر های کلاس متغییر های هستند که در همه کلاس ها در دسترس هستند و با @@ شروع میشوند .

شما نادرا Class variables هارو در اپلیکیشن های واقعی خواهید دید و شما میتونید پروژتون رو با متغییر های local , instance به پایان برسونید چون متغییر کلاس رو 98 درصد از توسعه دهندگان مورد استفاده قرار نمیدهند.


آموزش روبی (Ruby)
#2

متن نا خواناست
عموزش روبی!!!


#3

جدی میگین؟
اقا توماج فارسیم در این حده به خدا .
شاید بهتره کتابی بنویسم .:thinking:


#4

اصلا لازم نیست مظلوم نمایی کنی :snake::snake::snake:، فقط به جای آ از ا استفاده نکن :joy:


#5

:joy::joy: آهااااا منم فکر کردم که کل مطلب رسا نیست و مفهوم رو نمیرسونه .
چشم حتما حتما دقت میکنم . :v::rose:


#6

آخییییییششش!!!