Is Scala idiomatic coding style just a cool trap for writing inefficient code?

后端 未结 10 728
借酒劲吻你
借酒劲吻你 2020-12-22 17:19

I sense that the Scala community has a little big obsession with writing \"concise\", \"cool\", \"scala idiomatic\", \"one-liner\" -if possible- code. This

10条回答
  •  独厮守ぢ
    2020-12-22 17:34

    Another option would be:

    package code.array
    
    object SliceArrays {
      def main(args: Array[String]): Unit = {
        println(removeMaxCool(Vector(1,2,3,100,12,23,44)))
      }
      def removeMaxCool(xs: Vector[Int]) = xs.filter(_ < xs.max)
    }
    

    Using Vector instead of List, the reason is that Vector is more versatile and has a better general performance and time complexity if compared to List.

    Consider the following collections operations: head, tail, apply, update, prepend, append

    Vector takes an amortized constant time for all operations, as per Scala docs: "The operation takes effectively constant time, but this might depend on some assumptions such as maximum length of a vector or distribution of hash keys"

    While List takes constant time only for head, tail and prepend operations.

    Using

    scalac -print

    generates:

    package code.array {
      object SliceArrays extends Object {
        def main(args: Array[String]): Unit = scala.Predef.println(SliceArrays.this.removeMaxCool(scala.`package`.Vector().apply(scala.Predef.wrapIntArray(Array[Int]{1, 2, 3, 100, 12, 23, 44})).$asInstanceOf[scala.collection.immutable.Vector]()));
        def removeMaxCool(xs: scala.collection.immutable.Vector): scala.collection.immutable.Vector = xs.filter({
      ((x$1: Int) => SliceArrays.this.$anonfun$removeMaxCool$1(xs, x$1))
    }).$asInstanceOf[scala.collection.immutable.Vector]();
        final  private[this] def $anonfun$removeMaxCool$1(xs$1: scala.collection.immutable.Vector, x$1: Int): Boolean = x$1.<(scala.Int.unbox(xs$1.max(scala.math.Ordering$Int)));
        def (): code.array.SliceArrays.type = {
          SliceArrays.super.();
          ()
        }
      }
    }
    

提交回复
热议问题