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

scala
tutorial

#1

در برنامه نویسی و بخصوص برنامه نویسی functional خیلی وقتها تابع ها نه تنها رویه یک نوع تایپ کارکنن بلکه بطور کلی روی تایپ های هم شکل کارکنن این در جاوا Generics گفته میشه در سکالا تلاش میشه تا حد ممکن تایپ ها کلی بشه تا جبر برنامه از مفسر های مختلف جدابشه
این کار در Composition ترکیب بسیار مهمه

فرض کنید ما برنامه زیر داریم که با دادن هر عدد صحیح اونو تو لیست برمیگردونه

object ListMaker {
  def toList(a: Int): List[Int] =  List(a)
}

حالا اگر اینو بخواهیم برای String بنویسیم باید دوباره اینو تعریف کنیم ولی با استفاده از type parametrization میشه این تایپو کلی کرد

object ListMaker {
  def toList[A](a: A): List[A] =  List(a)
}

اینجا ما به compiler با [A ] میگیم فرض کن A یک تایپ کلیه حالا کد برای هر تایپی کار میکنه

لازم به ذکر که type parametrization روی trait ها و کلاس ها هم کار میکنه


trait Reducer[A] {
   def empty: A
   def combine(a: A, b: A): A
}

object IntReducer extends Reducer[Int] {
  def empty(a: Int, b: Int): Int = 0 
  def combine(a: Int, b: Int): Int = a + b 
}


object StringReducer extends Reducer[String] {
  def empty(a: String, b: String): String = "" 
  def combine(a: String, b: String): String = a + b 
}

مقدمات سکالا