אם הם רק היו עקביים...
24/12/2022
בואו ניקח את Range כדוגמה. יש שפות בהן Range לא כולל את האיבר האחרון, כך בפייתון:
>>> 5 in range(0, 5)
False
ב JavaScript, עם lodash:
_.range(0, 5)
Array(5) [ 0, 1, 2, 3, 4 ]
ב Clojure:
user=> (range 0 5)
(0 1 2 3 4)
ב Rust:
for i in 0..5 {
print!("{}", i)
}
// prints: 01234
אבל אז יש את השפות בהן האיבר האחרון הוא כן חלק מ Range. למשל Elixir:
iex(2)> Enum.member?(0..5, 5)
true
או Bash:
$ echo {0..5}
0 1 2 3 4 5
ואז יש את רובי, שמציעה שתי דרכים ליצור Range:
3.1.1 :001 > (0..5).include?(5)
=> true
3.1.1 :002 > (0...5).include?(5)
=> false
לא משנה כמה שפות אנחנו מכירים, אי אפשר לברוח מלהכיר את המאפיינים הייחודיים של כל שפה. אין איזה מפעל מרכזי או תו תקן לשפות תכנות, וזה באמת יכול להרגיז לפעמים. כן כדאי לזכור איזה אופרטורים מתנהגים אחרת בין שפות, כדי שתוכלו לוודא בשפה הנוכחית שלכם איך זה עובד, ולזכור לא לבנות על זה כשעוברים לשפה אחרת.