Java 我是否应该更改为scala以创建具有重写规则的系统?
我开发了一些类,这些类在Android应用程序中使用。我在这个核心中有6-7个类,其中一些是带有抽象方法的抽象类。创建这些类是为了提供一个API来扩展我的Android应用程序 现在我想创建一个接受重写规则的可扩展系统。这些规则对于在运行时替换某些组件非常有用。想象一个有数学运算的系统,你可以看到所有的和,乘法,等等。现在你可以缩小,我想根据缩放级别简化一些运算 我的系统是用java构建的,但我相信scala和模式匹配可以简化我的问题。然而,每次我看scala的时候,我都会发现我要花很多时间和精力 我的类用于创建如下结构: 我希望能够编写规则来创建包含其他块的块。比如:Java 我是否应该更改为scala以创建具有重写规则的系统?,java,android,scala,architecture,Java,Android,Scala,Architecture,我开发了一些类,这些类在Android应用程序中使用。我在这个核心中有6-7个类,其中一些是带有抽象方法的抽象类。创建这些类是为了提供一个API来扩展我的Android应用程序 现在我想创建一个接受重写规则的可扩展系统。这些规则对于在运行时替换某些组件非常有用。想象一个有数学运算的系统,你可以看到所有的和,乘法,等等。现在你可以缩小,我想根据缩放级别简化一些运算 我的系统是用java构建的,但我相信scala和模式匹配可以简化我的问题。然而,每次我看scala的时候,我都会发现我要花很多时间和精
Integer Provider + Integer Provider -> Sum Provider
Sum Provider + Sum -> Sum Provider
规则可以由程序员创建。我的结构中的任何元素也可以由程序员构建。我不知道scala是否简化了这个规则引擎系统,但我知道用java构建这个引擎可能会很无聊(可能会产生很多bug,我会忘记一些情况,等等)
我是否应该将所有系统都更改为scala?还是只有scala的这个特性可以使用?值得吗
PS:有关结构的更多信息,请参阅本帖 如果要切换到Scala,请尽可能切换到它。使用Java几乎没有意义 值得投资吗?从网络上的阅读(以及我自己的印象)来看,使用Scala不会更快,但会学到很多东西 因此,如果您只关心开发速度:忽略Scala
如果你想学习:Scala是下一个学习和使用的语言的绝佳选择。如果你要切换到Scala,请尽一切可能切换到它。使用Java几乎没有意义 值得投资吗?从网络上的阅读(以及我自己的印象)来看,使用Scala不会更快,但会学到很多东西 因此,如果您只关心开发速度:忽略Scala
如果你想学习:Scala是下一个学习和使用的语言的绝佳选择。作为一个单独的开发人员,Scala具有丰富的表达能力和强大的功能,因此一旦掌握了它,你就可以满足于少写多做——少编写样板代码,多使用简洁的习惯用法 然而,Scala的强大是要付出代价的:它是一种完全不同的语言,与Java有着不同(我要说更复杂)的习惯用法和语法。Java被设计为故意简单,其思想是,在开发人员之间共享更多代码的大型组织中,明确性和语法简单性比精练的代码更有价值 Java有意选择提供一个更小的工具集,以使一个开发人员能够尽可能快速、轻松地找到另一个开发人员的工作,因此从这个意义上讲,它是面向团队开发的。然而,Scala为您提供了更多的约束,使您可以创建简洁但不那么明显的结构,这对于大型企业环境来说可能是一个缺点 目前,Scala的开发人员库也比Java小,这意味着如果您打算雇佣开发团队,示例和人才库会更少
但是,作为一个单独项目的单独开发人员或是一个小而紧密的团队,一旦你克服了重大的学习困难,Scala就可以很有趣、很快地编写代码。作为一个单独的开发人员,Scala表现力强、功能强大,因此一旦掌握了它,就可以满足于少写多做——少编写样板代码,多使用简洁的习惯用法 然而,Scala的强大是要付出代价的:它是一种完全不同的语言,与Java有着不同(我要说更复杂)的习惯用法和语法。Java被设计为故意简单,其思想是,在开发人员之间共享更多代码的大型组织中,明确性和语法简单性比精练的代码更有价值 Java有意选择提供一个更小的工具集,以使一个开发人员能够尽可能快速、轻松地找到另一个开发人员的工作,因此从这个意义上讲,它是面向团队开发的。然而,Scala为您提供了更多的约束,使您可以创建简洁但不那么明显的结构,这对于大型企业环境来说可能是一个缺点 目前,Scala的开发人员库也比Java小,这意味着如果您打算雇佣开发团队,示例和人才库会更少
但是,作为一个单独项目的单独开发人员或是一个小而紧密的团队,一旦你克服了学习上的困难,Scala就可以很有趣、很快地编写代码。是的,在Scala中编写这样的规则很容易,事实上,在Scala中的规则重写系统的堆栈溢出方面存在一些问题。另外,有一些库可能会在这方面帮助您,与战略编程和nlp相关,但我还没有使用它们,所以我不能发表太多评论 现在,我不知道这些课程是从哪里来的。如果您正在解析和构建它们,parser combinator库可以轻松地处理它:
sealed trait Expr { def value: Int }
case class Number(value: Int) extends Expr
case class Sum(e1: Expr, e2: Expr) extends Expr { def value = e1.value + e2.value }
object Example extends scala.util.parsing.combinator.RegexParsers {
def number: Parser[Expr] = """\d+""" ^^ (n => Number(n.toInt))
def sum: Parser[Expr] = number ~ "+" ~ expr ^^ {
case n ~ "+" ~ exp => Sum(n, exp)
}
def expr: Parser[Expr] = sum | number
}
如果您以其他方式拥有这些类,并且正在应用简化,您可以这样做:
def simplify(expr: List[Expr]): Expr = expr match {
case expr :: Nil =>
List(expr) // no further simplification
case (n1: NumberProvider) :: Plus :: (n2: NumberProvider) :: rest =>
simplify(SumProvider(n1, n2) :: rest)
case (n: NumberProvider) :: Plus :: (s: SumProvider) :: rest =>
simplify(SumProvider(n, s) :: rest)
case (s: SumProvider) :: Plus :: (n: NumberProvider) :: rest =>
simplify(SumProvider(s, n) :: rest)
case other => other // no further simplification possible
}
这里的重要元素是案例类、提取器和模式匹配。是的,在Scala中编写这样的规则很容易,事实上,Scala中的规则重写系统在堆栈溢出方面存在一些问题。另外,有一些库可能会在这方面帮助您,与战略编程和nlp相关,但我还没有使用它们,所以我不能发表太多评论 现在,我不知道这些课程是从哪里来的。如果你是