草庐IT

groovy - 静态编译的 Groovy 中没有哪些 Kotlin 功能?

coder 2023-05-08 原文

如果我们静态编译 Groovy,Kotlin 和 Groovy 看起来是非常相似的语言,具有非常相似的特性。除了 null 安全性之外,Kotlin 还缺少哪些 Groovy 中的功能?

最佳答案

Kotlin 是一种 JVM 语言,IMO 正试图在 Java 的特性和简洁性方面进行改进,同时保持命令式和静态。 Groovy 有一个类似的概念,只是决定采用动态。因此,许多语言功能将是相似的。

以下是我知道的一些差异

  • 静态 vs 动态:由于 Groovy 被设计为动态语言,而 @CompileStatic 虽然是一个很好的注释(我经常使用它),但后来被添加了。它的功能感觉有点固定,它不会强制人们以静态方式编码。它并非在任何地方都可用(例如,我的 Spock 测试似乎无法与它们一起编译)。有时即使在 Groovy 上使用它,它似乎仍然不时出现一些奇怪的动态行为。 Kotlin 是 100% 静态的,动态的不是一个选项。

还有许多其他功能。我建议您查看引用资料,您可能会发现更多,例如https://kotlinlang.org/docs/reference/

  • 数据类 - 简洁的复制功能(有点像 Scala 中的案例类)
  • 你提到的空安全检查(这是一个大专业)
  • 破坏元素的能力。 val(姓名,年龄)=人
  • 高阶函数,定义为“fun doStuff(body: Int -> T)): T”。这比 groovy Closures IMO 要好得多。 (非常类似于 Scala 的)
  • 类型检查和智能转换很不错:https://kotlinlang.org/docs/reference/typecasts.html
  • 伴随对象,就像 Scala 也尝试从类中删除静态方法一样,Kotlin 也尝试了同样的事情。
  • 限制继承的密封类(Scala 也有类似的东西)
  • “Nothing”子类型,这里的一切都是它的父类(super class)型。 (Scala 中的另一个重要概念)。
  • 用于基本模式匹配的表达式:https://kotlinlang.org/docs/reference/control-flow.html

正如您所见,它确实借鉴了 Groovy 以外的其他语言。他们试图挑选一些优秀的特性来制作一门好的语言。 Groovy 自然有它自己的优点。我只关注 Kotlin 所拥有的一项,反之亦然

另一个优点是,由 IDE 制造商制作,编译器速度非常快,并且有很好的 IDE 支持。并不是说 Groovy 没有很好的支持,但是我目前的项目确实需要很长时间才能编译,并且重构方法总是假设您正在以动态方式编码。

我建议您试用 Koans,感受一下您喜欢该语言的哪些功能以及它与 groovy (https://github.com/Kotlin/kotlin-koans) 的比较。

关于groovy - 静态编译的 Groovy 中没有哪些 Kotlin 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35973196/

有关groovy - 静态编译的 Groovy 中没有哪些 Kotlin 功能?的更多相关文章

  1. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  2. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  3. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  4. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  5. 没有类的 Ruby 方法? - 2

    大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow

  6. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  7. ruby - Sinatra set cache_control to static files in public folder编译错误 - 2

    我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.

  8. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

    我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

  9. ruby - 没有类方法获取 Ruby 类名 - 2

    如何在Ruby中获取BasicObject实例的类名?例如,假设我有这个:classMyObjectSystem我怎样才能使这段代码成功?编辑:我发现Object的实例方法class被定义为returnrb_class_real(CLASS_OF(obj));。有什么方法可以从Ruby中使用它? 最佳答案 我花了一些时间研究irb并想出了这个:classBasicObjectdefclassklass=class这将为任何从BasicObject继承的对象提供一个#class您可以调用的方法。编辑评论中要求的进一步解释:假设你有对象

  10. ruby - 没有轨道的 ActiveRecord 时区 - 2

    我在非Rails项目中使用ActiveRecord。在Rails中,我可以这样做:config.time_zone='EasternTime(US&Canada)'config.active_record.default_timezone='EasternTime(US&Canada)'但如果我不使用rails,我该如何设置时区? 最佳答案 ActiveRecord::Base.default_timezone='EasternTime(US&Canada)' 关于ruby-没有轨道的A

随机推荐