مقدمات سکالا 6

scala
tutorial

#1

نگاهی دیگر به لیست ها

لیست ها در سکالا و زبان های functional دیگر از دوقسمت head و tail تشکیل شدند
لیست در سکالا با دو روش نوشته میشه روش اول که باهاش آشنا هستیم

val list = List(1,2,3)

روش دوم

val list = 1 :: 2:: 3 :: Nil

ایندو یکی هستن در اینجا :: head به tail بعدی اضافه میکنه و cons نامیده میشه
سکالا قابلیت های pattern matching بسیار قوی داره

def sum(list: List[Int]): Int = {
  list match {
    case Nil => 0
    case h :: t => h + sum(t) 
  }
}

در بالا اگربه لیست با چند عدد برسیم عدد head اضافه میکنیم بصورت برگشتی به ادامه لیست تا به ته لیست برسیم Nil و صفر برگردونیم

چند تابع کاربردی که بعد ها بیشتر درموردشون صحبت میکنیم

map
function داده شده رو روی تمامه داده های لیست اجرا کرده و لیست جدید برمیگردونه

  list.map{ (x) => x *2 }.map(_*3)
  //res5: List[Int] = List(6, 12, 18, 24)

filter
function boolean میگیره و هر داده تو لیست که این function true جواب بده تو لیست جدید برمیگردونه

  list.filter(_>2)
  //res6: List[Int] = List(3, 4)

reduce
تابع دو تایی روی داده های لیست به صورت جفت انجام میده و نتیجه با تایپه داخل لیست رو برمیگردونه

  list.reduce((x,y) => x*y)
  //res13: Int = 24

flatten

اگر لیست داخلش لیست دیگری باشه داده های لیست درونی فقط درون لیست برمیگردونه

  List(List(1,2,3)).flatten
  //res15: List[Int] = List(1, 2, 3)

flatMap
ترکیب map و flatten که لیست لیست و میگیره و ی تابع رو آنها انجام میده و نتیجه به صورت یک لیست برمیگردونه

  List(List(1, 2), List(3, 4)).flatMap(x => x.map(_ * 2))
  //res16:  List[Int] = List(2, 4, 6, 8)

مقدمات سکالا