عملگر =|| در روبی

دوستان این عملگر به طور مثال در کد زیر به کار برده شده ولی راستش دقیق متوجه کاراییش نشدم

current_user ||= User.find(session[:user_id]) if session[:user_id]@

ممنون میشم توضیح بدین

من خیلی کم با روبی کار کردم ولی فکر کنم اگه current_user برابر با nil یا false باشه، عمل assign رو انجام میده. اگر از قبل چیزی توش باشه، اون خط رو اصلا اجرا نمیکنه.

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

در مثال شما current_user به این روش memoize شده، یعنی فقط در صورتی کوئری اجرا میشه که current_user نتیجه نده.

میشد به صورت زیر هم عمل کرد اما روش شما خیلی ساده تر و بهتره.

a = a.present? ? a : ....
2 Likes

بله درسته ولی کاراییش رو تو این قطعه کد متوجه نشدم

نتیجه نده یعنی عملا مقداری از قبل نداشته باشه درسته؟

یعنی false یا nil باشه

صفر در روبی معنی false رو نمیده؟

خوشبختانه نه، اما خیلی راحت میتونی امتحان کنی

puts 0 || 1

2 Likes

درسته کاملا حرفتون ممنونم

a = a || b

مفهموم کد بالا این میشه درسته؟

1 Likes

giphy

2 Likes