הפונקציות foldLeft ו-foldRight מקבלות כל אחת מהן בעת ההפעלה שלה שני ארגומנטים. הארגומנט הראשון הוא ערך הבסיס. הארגומנט השני הוא הפונקציה אשר תופעל שוב ושוב. הפונקציה שנשלחת כארגומנט שני צריכה להיות עם שני פרמטרים. בכל פעם שהיא תופעל יישלח אליה כארגומנט ראשון הערך שהוחזר בהפעלה הקודמת שלה וכארגומנט שני יישלח הערך הבא בסדרת המספרים. בהפעלה הראשונה של הפונקציה שנשלחה כארגומנט שני יישלח אליה כארגומנט ראשון ערך הבסיס.
הפונקציה foldLeft אשר הוגדרה ב-List
כאשר קוראים להפעלת הפונקציה foldLeft על list שברשותנו יש לשלוח אליה את הערך ההתחלתי לביצוע החישוב שייעשה, ופונקציה אשר תופעל שוב ושוב תוך כדי מעבר על הערכים של ה-list משמאל לימין. בכל הפעלה שלה יישלח כארגומנט שני הערך שהוחזר בהפעלה הקודמת וכארגומנט ראשון יישלח הערך מתוך הרשימה שבו foldLeft כעת מתמקדת. בהפעלה הראשונה של foldLeft יישלח כארגומנט שני הערך ההתחלתי. דוגמת הקוד הבאה ממחישה זאת.
object FoldDemo {
def main(args: Array[String]): Unit = {
var numbers: List[Int] = List(2, 4, 6, 8, 3, 1)
def f(num1: Int, num2: Int): Int = {
var result: Int = num1 + num2
println(s"inside f num1=$num1 num2=$num2 result=$result")
result
}
println("calling foldLeft")
var number1: Int = numbers.foldLeft(0)(f);
println(number1)
}
}
כאשר מריצים את דוגמת הקוד הפלט אכן מעיד על כך שהפונקציה foldLeft עוברת על כל הערכים בסדרה הנתונה והיא עושה זאת משמאל לימין.
הפונקציה foldRight אשר הוגדרה ב-List
כאשר קוראים להפעלת הפונקציה foldRight על list שברשותנו יש לשלוח אליה את הערך ההתחלתי לביצוע החישוב שייעשה, ופונקציה אשר תופעל שוב ושוב תוך כדי מעבר על הערכים של ה-list מימין לשמאל. בכל הפעלה שלה יישלח כארגומנט שני הערך שהוחזר בהפעלה הקודמת וכארגומנט ראשון יישלח הערך מתוך הרשימה שבו foldRight כעת מתמקדת. בהפעלה הראשונה של foldRight יישלח כארגומנט שני הערך ההתחלתי. דוגמת הקוד הבאה ממחישה זאת.
package com.lifemichael.samples
object FoldDemo {
def main(args: Array[String]): Unit = {
var numbers: List[Int] = List(2, 4, 6, 8, 3, 1)
def f(num1: Int, num2: Int): Int = {
var result: Int = num1 + num2
println(s"inside f num1=$num1 num2=$num2 result=$result")
result
}
println("calling foldRight")
var number1: Int = numbers.foldRight(0)(f);
println(number1)
}
}
להלן הפלט שמתקבל מההרצה של דוגמת הקוד. כפי שניתן לראות, הפלט מעיד על אופן פעולתה של המתודה foldRight. ניתן לשים לב לכך ה-foldRight עוברת על כל הערכים בסדרה מימין לשמאל, וניתן לשים לב לכך שהערך הראשון שנשלח אל הפונקציה אשר שלחנו ל-foldRight הוא הערך מתוך הסדרה שבו מתמקדת foldRight.
הסמינר המקצועי Collections in Scala
אנו מפתחים סמינרים מקצועיים בתחומים שונים. ניתן להזמין את העברתם בחברות הייטק אשר מעוניינות לפתח ולקדם את היכולות המקצועיות של מפתחי התוכנה שהן מעסיקות. אחד הסמינרים שפיתחנו לאחרונה מתמקד בעבודה עם collections בשפת התכנות Scala. מדובר בנושא חשוב שלעיתים מתפספס.
במידה שקיים נושא שהייתם מעוניינים בסמינר מקצועי אשר מכסה אותו אנא אל תהססו וצרו עימנו קשר. נשמח לבדוק את האפשרות לפתח סמינרים חדשים בנושאים שבהם קיים עניין.