המתודות reduceRight ו-reduceLeft של List

Scala Programming Course
בדומה לשפות תכנות אחרות, גם Scala תומכת בפעולות reduce כאלה ואחרות בעבודה עם collections. כך למשל, הפונקציות reduceRight ו-reduceLeft שמוגדרות ב-List.

Share This Post

המחלקה List כוללת את ההגדרה של המתודות reduceRight ו-reduceLeft. שתיהן פועלות באופן דומה רק שהאחת עושה את פעולתה מימין לשמאל והשניה משמאל לימין. 

פעולת ה-reduce על הערכים שמוחזקים באובייקט מסוג List

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

קריאה להפעלת הפונקציה reduceLeft על אובייקט מסוג List

בדוגמת הקוד הבאה קיים אוסף של ערכים מספריים שלמים. כאשר קוראים להפעלת הפונקציה reduceLeft מתבצע מעבר על כל הערכים המספריים השלמים משמאל לימין. בתחילה נשלחים לפונקציה ששלחנו שני הערכים הראשונים בקצה השמאלי של הרשימה והתוצאה מייד אחר כך נשלחת שוב לאותה פונקציה ששלחנו ל-reduceLeft יחד עם הערך הבא (הערך השלישי ברשימה). 

				
					package com.lifemichael.samples

object ReduceDemo {
  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 = if (num2 > num1) num2 else num1
      println(s"inside f num1=$num1 num2=$num2 result=$result")
      result
    }

    println("calling reduceLeft")
    var number1: Int = numbers.reduceLeft(f)
    println(number1)

  }
}

				
			

הפלט שמתקבל מהרצת הקוד מעיד על כך שבהפעלה של הפונקציה f, הפונקציה אשר נשלחה ל-reduceLeft, נשלחו בכל פעם שני ערכים מתוך הרשימה. בהפעלה הראשונה של f נשלחו שני הערכים הראשונים משמאל. בהפעלה השניה נשלחו שני ערכים שמורכבים מהערך שהוחזר בהפעלה הראשונה והערך השלישי, וכך הלאה. 

Scala Programming Course
קריאה להפעלת הפונקציה reduceRight על אובייקט מסוג List

בדוגמת הקוד הבאה קיים אוסף של ערכים מספריים שלמים. כאשר קוראים להפעלת הפונקציה reduceRight מתבצע מעבר על כל הערכים המספריים השלמים משמאל לימין. בתחילה נשלחים לפונקציה ששלחנו שני הערכים הראשונים בקצה הימני של הרשימה והתוצאה מייד אחר כך נשלחת שוב לאותה פונקציה ששלחנו ל-reduceRight יחד עם הערך הבא (הערך השלישי ברשימה). 

				
					package com.lifemichael.samples

object ReduceDemo {
  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 = if (num2 > num1) num2 else num1
      println(s"inside f num1=$num1 num2=$num2 result=$result")
      result
    }

    println("calling reduceRight")
    var number1: Int = numbers.reduceRight(f)
    println(number1)

  }
}

				
			

הפלט שמתקבל מהרצת הקוד מעיד על כך שבהפעלה של הפונקציה f, הפונקציה אשר נשלחה ל-redeuceRight, נשלחו בכל פעם שני ערכים מתוך הרשימה. בהפעלה הראשונה של f נשלחו שני הערכים הראשונים מימין. בהפעלה השניה נשלחו שני ערכים שמורכבים מהערך שהוחזר בהפעלה הראשונה והערך השלישי מימין, וכך הלאה. 

Scala Programming Course

קיימות פונקציות דומות אשר פועלות באופן מעט שונה, כגון foldLeft ו-foldRight, אשר להן נקדיש פוסט אשר ייכתב בנפרד. 

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

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

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

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

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

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

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

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

life michael academy asynchronous online courses

Java | Python | JavaScript | TypeScript

Update cookies preferences