שמות בעלי משמעות?
רובי 3.4 הוסיפה תמיכה במילה שמורה חדשה - it. עכשיו אפשר לכתוב:
users
.reject(&:admin?)
.flat_map { find_teams(it) }
.uniq
מעניין לשים לב שרק לפני 5 שנים יצאה גירסה 2.7 של רובי שהוסיפה את התמיכה ב _1
, והיתה הרבה התלהבות סביב זה כי עד אז היינו כותבים:
users
.reject(&:admin?)
.flat_map { |user| find_teams(users) }
.uniq
והחל מ 2019 אנחנו יכולים לכתוב:
users
.reject(&:admin?)
.flat_map { find_teams(_1) }
.uniq
ופה המקום לחזור לפיסקה הראשונה ולשאול - מה בעצם קרה פה? למה צריך גם _1
(ואת החברים שלו _2
לפרמטר השני, _3
לשלישי ועד _9
) וגם את it
שמתנהג בדיוק כמו _1
שכבר קיים?
אבל אולי יותר נכון להסתכל על התוספת הזאת כמו עוד חלק בפאזל התרבותי של רובי. כן חלק מהמטרה שם היא ליצור שפה עם הרבה מילים, ושתהיה מילה שמתאימה לכל דבר. כשרואים _1
בתוך בלוק אפשר לתהות האם יש גם _2
ולמה הוא לא כתוב שם. כשרואים it
ברור שיש רק פרמטר אחד, ועבור אותם מקרים המילה החדשה שיפרה קצת את הקריאות של הקוד. ומה עם "צריכה להיות רק דרך אחת ברורה לעשות דברים?" נו, זה בכלל משפה אחרת.