سلام دوستان امروز میخوایم در مورد رشته ها در روبی صحبت کنیم که مبحث مهم و شیرینی خواهد بود .
مقدمه
وقتی شما از رشته ها استفاده میکنید باید حتما بین quotation قرار بدید . و اگر متن یا جملتون بین کوتیشن قرار نگرفت ، با ارور مواجه خواهید شد .
همچنین شما میتوانید از هردو quotation تک ، یا جفت quotation استفاده کنید . ولی یادتون باشه که در اول و اخر جمله قرار بگیره و همچنین مشابه هم باشه ( یکی " , یکی ’ ) نباشه
مثلا به این شکل
"hello world how are you"
'hello dear im fine'
String interpolation
String interpolation چیست؟
خب سوال خوبیه ، ما با این روش میتونیم یک جمله داینامیک داشته باشیم . به مثال زیر دقت کنید
puts "what is your favorite color"
color = gets.chomp
puts "my favorite color is #{color} and i love that."
خب وقتی خروجی رو میبنید میفهمید که ان چه که به عنوان رنگ مورد علاقه ذخیره شده بود در جمله رنگ مورد علاقه من … در اومد.
دیدید که ما با یک علامت # و قرار دادن یک متغیر در curly brackets ها ، تونستیم جوابی که ذخیره کرده بودیم رو نمایش دهیم .
حال بیاین به جای double quotation از single quotation استفاده کنید و ببینید چه مشکلی پیش میاد.
میبینید که کدمون عینا چاپ شد . پس باید دقت کنیم که وقتی از این روش استفاده میکنیم . باید حتما از دابل کوتیشن استفاده کنیم.
String manipulation
در این بخش نیز در مورد تغییرات مقدار و یا نوع رشته ها بحث خواهیم کرد .
که لازم به ذکر است تغییرات ظاهری رشته ها در اخر به صورت یک مقدار جدید خواهد بود .
هیچ کدوم از متد های استفاده شده در این بخش تغییری در رشته ایجاد نمی کنند, همه اینها رشته جدید درست می کنند.
- lower case کردن
با این متد میشه رشته هامون رو به صورت lower case یا همون حرف کوچک در اورد . به این شکل:
"ESTEGHLAL".downcase
- capital letters کردن
با این روش نیز میشه جمله ها و متن هارو به صورت capital در اورد . به این صورت :
"persepolis".upcase
- swap case
در این حالت نیز از capital بود به lowercase و اگر lowercase بود به شکل capital در میاره .
"juventus".swapcase
و در اخر اگر میخواهید که کلمه یا متنتون به شکل برعکس دربیاد هم باید به این صورت عمل کنید :
"barcelona".reverse
که جمع همشون به این کل خروجی خواهد داد.
Method chaining
در این روش ما میتونیم چند متد رو با هم وصل کرده و ازش استفاده کنیم . یعنی از دو یا جند متد با قرار دادن یک نقطه میانشان به هم وصل کرده و نهایت استفاده رو ببریم . به این صورت که اگر :
"esteghlal".upcase.reverse
بنویسیم … متن ما هم به صورت capital و هم به صورت برعکس خواهد شد .
که به این روش Method chaining میگویند که در اینده بسیار مفید خواهد بود .
!Give it a bang
در زبان روبی شما اگر اخر متد یه علامت ! بزارید یا یه متدی ببینید که در اخرش علامت تعجب قرار گرفته شما اونو به صورت bang میخونید یعنی بطور مثال !my_method که میخونید (مای متد بنگ).
خب این یعنی چی؟
- وقتی میخوایم داده یک متغییر به صورت پایدار شکل بگیره از bang استفاده میکنیم.
- عموما وقتی علامت تعجب در اخر یک متد قرار میگیره به این معنیه که مقادیر یا رشته های اصلی و اورجینال متد تغییر کرده است .
توجه => بازم بازش ترش میکنم ولی صبر کنین که اول یه چیز دیگه ای یاد بگیریم بعد .
جایگزینی رشته ها
ما در این بخش یاد خواهیم گرفت که چطور چند کلمه رو با هم در جمله ای جایگزین یا معاوضه کنیم .
به این صورت که ما رشته ای رو توی یک متغییر به این شکل قرار دادیم .
x = "rabbit faster than turtle"
حالا میخوایم کلمه rabbit رو با turtle عوض کنیم … که باید از متد sub استفاده کنیم .
به این شکل عمل کنیم :
x = "turtle faster than turtle"
x.sub "turtle" "rabbit"
که نتیجه این کد جایگزینی کلمه turtle در اول جمله با rabbit خواهد بود .
باید بدونید که متد sub دو تا ورودی رو بهش پاس دادیم (در اینده راجع به ورودی ها و متد ها حرف خواهیم زد )
که اولی کلمه ای است که میخواهیم در جمله مورد نظر پیدا کنیم و ورودی دوم هم برای جایگزینی کلمه پیدا شده استفاده میکنیم.
تذکر => متد sub تنها اولین کلمه یافت شده رو جایگزین کلمه مورد نظر خواهد کرد.
تذکر => اگر جمله ی شما طولانی بوده و همچنان کلمه مورد نظر که میخواهید جایگزین شود در جمله مکررا تکرار شده بود . باید از متد gsub استفاده کنید که به صورت global یا همون سراسری جمله مورد نظر رو میگرده و همه کلمات همخوان یافته شده رو جایگزین کلمه مورد نظر شما میکند .
در بالا گفتم که در مورد bang بیشتر صحبت خواهیم کرد . الان وقتشه .
الان ما میخواهیم تفاوت بین sub و !sub رو بدونیم :
بیاین دوباره برگردیم به کد قبلی و یک بار دیگر بعد جایگزینی دوباره متغییرمون رو چاپ کنیم و ببینیم چه اتفاقی میفته.
از اونجایی که میبینید متغییر مون بعد اینکه دوباره فراخونده شد ، باز به حالت قبل از جایگزینی برگشت .
پس یعنی تغییراتمون ذخیره نشده اند .
الانه که بیایم متدمون رو بنگ کنیم و ببینیم چه اتفاقی میفته
حالا فرق بنگ کردن متد رو فهمیدید؟ .
پس اگه ما بخواییم که تغییرات داده ما به صورت پایدار باقی بمونه میتونیم متدمون رو bang کنیم .
Split, strip, and join در رشته ها
strip
با متد strip میتوان از اول و اخر رشته فاصله هارو حذف کرد . یعنی اگه یه رشته ای به شکل زیر داشته باشیم
str = " you are the best "
puts str.strip
هر دو فاصله ای که در اول و اخر جمله هستش پاک میشه .
split
با استفاده از متد split شما میتوانید یک رشته را به ارایه تبدیل کنید .
یعنی به این شکل که اگر ما این جمله را داریم و میخواهیم به یک ارایه تبدیل کنیم به این شکل عمل میکنیم .
str = "this rainbow is so beautifull"
puts str.split
خروجی به این صورت خواهد بود
همچنان میتوانیم با استفاده از متد size و به اصطلاح chain کردن که خوندیم ، سایز کلمه هایی که به ارایه تبدیل شده اند رو بدست بیاریم .
puts str.split.size
همچنین میتوان تعداد حروف رو نیز بدست اورد (space نیز شمرده میشه) ، به این شکل :
puts str.split(//).size
join
این یکی از متد های پرکاربرد در روبی هستش . و کارکرد ان به این شکل است که مارو قادر به وصل کردن رشته ها به هم با استفاده از هر حروفی یا شکلی میکنه . اوخ اوخ چقدر پیچیدش کردم . بیاین با یک مثال یادش بگیریم .
فرض کنید ما یک جمله ای به این شکل داریم .
str = "catredisthis"
و ما میخوایم اونو به شکل this is red cat در بیاریم . یعنی برعکسش کنیم و بینشون هم فاصله قرار بدیم.
چطور انجامش میدیم ؟ خب خیلی راحت اول متغییرمونو میگیریم و split میکنیم تا به یک ارایه تبدیل بشه . و حالا هر کلمه از جمله رو داریم . بعد با متد reverse کلمه هارو بعکس میکنیم . (یعنی جاشون برعکس میشه ) و بعد با متد join اونارو دوباره به هم وصل میکنیم . و تموم شد . حالا تو کد ببینیمش :
توجه کنید که به جای فاصله تو متد join میتونید هر کاراکتری قرار بدید که بر اساس اون کلمه هارو به هم وصل کنه.