המתודות foldLeft ו-foldRight של List

Scala Programming Course
כל אחת מהמתודות foldLeft ו-foldRight מקבלת בעת הפעלתה פונקציה וערך התחלתי, ומתחילה לעבור על כל הערכים בסדרה הנתונה. בכל פעם שהפונקציה שנשלחה מופעלת, נשלחים אליה הערך הבא ברשימה והערך שהוחזר בהפעלה הקודמת. בהפעלה הראשונה של הפונקציה שנשלחה היא מקבלת את הערך ההתחלתי שששלחנו לפונקציית ה-fold ואת הערך הראשון ברשימה.

Share This Post

הפונקציות 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 עוברת על כל הערכים בסדרה הנתונה והיא עושה זאת משמאל לימין. 

Scala Programming Course
הפונקציה 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. 

Scala Programming Course
הסמינר המקצועי Collections in Scala

אנו מפתחים סמינרים מקצועיים בתחומים שונים. ניתן להזמין את העברתם בחברות הייטק אשר מעוניינות לפתח ולקדם את היכולות המקצועיות של מפתחי התוכנה שהן מעסיקות. אחד הסמינרים שפיתחנו לאחרונה מתמקד בעבודה עם collections בשפת התכנות Scala. מדובר בנושא חשוב שלעיתים מתפספס. 

במידה שקיים נושא שהייתם מעוניינים בסמינר מקצועי אשר מכסה אותו אנא אל תהססו וצרו עימנו קשר. נשמח לבדוק את האפשרות לפתח סמינרים חדשים בנושאים שבהם קיים עניין. 

הירשמו לניוזלטר שלנו

התעדכנו בחידושים הטכנולוגים

פוסטים נוספים

karate software development
מאפייני ההדרכה

קווי הדימיון שקיימים בין פיתוח תוכנה וקראטה

קיימים קווי דמיון רבים בין אמנות הלחימה קראטה לבין פיתוח תוכנה. תהליך הלימוד האינסופי, ההתמקדות בהבנה יסודית של הנושאים הבסיסיים לפני שמתקדמים ללימוד הנושאים המתקדמים הם המאפיינים הדומים העיקריים.

הזנק את העסק שלך!

נשמח להיפגש לקפה!

life michael academy asynchronous online courses

Java | Python | JavaScript | TypeScript

Update cookies preferences