我发现我的Java重拍了!

在一月份,我写了一篇文章,介绍了一些我希望在Java语言中看到的变化,这些变化会让我更加喜欢它(并使它变得更现代)。 很多人建议使用许多JVM语言,但我基本上不予使用,因为这不是我想要的。 我希望Java在这些方面有所不同,因为我不太可能说服工作场所让我使用Java以外的东西。 此外,建议的大多数JVM语言都具有一些语法思想,这些思想对我来说很难理解。

但…

但是,后来我找到了Kotlin。 这是由JetBrains,IntelliJ,PyCharm和其他一些IDE和工具的创建者制作的JVM语言。 在大多数情况下,我觉得这些家伙读懂了我想从我的语言中得到什么。 他们错过了我帖子中的一些内容,但是却有很多我忘记或什至没有想到的内容。

与我的旧清单比较

首先,我们将把他们做了什么和没有做的与我以前的帖子中的列表进行比较。

摆脱分号

Kotlin并非没有分号,但是在极少数情况下需要它们。 在大多数情况下,您可以在行尾省略分号。

卸下花括号

可悲的是,他们没有这样做。 我住

操作员超载

是的,他们有很多操作员重载。 与Python不同的是,它们具有递增和递减运算符,正负标记以及否定运算符(例如python的__bool__() ,但具有自动转换功能;相反,它们还具有用于创建一系列对象的运算符( 1..3 ),但两个数字在Kotlin中都应包含在内,尽管通常更容易阅读,但在很多时候都可以进行更多中间计算,这就是为什么许多语言都希望将末尾包括在内。

最后,您定义自己的“运算符”,但是它们必须是布尔值中缀运算符。 实际上,您没有定义自己的运算符,因为在使用一个参数调用方法时,该语言提供了一点语法上的好处。 对象a的任何方法md (通过参数b调用)(即a.md(b) )都可以更简单地写为a md b

元组和/或数据结构

从某种意义上说,Kotlin同时具有这两种功能,但从某种意义上讲,两者都没有。

它们有一个名为Pair的类,可以用作2元组,并且它们有一个不错的语法糖系统,可以将任何类都转换为一个已命名的元组。 您可以通过字段的位置或字段名称来引用它们。 有关更多信息,请查看其有关Multi-Declarations的文档。

至于数据结构,他们走了带有属性的类路线,这很好而且很花哨。 但是,关于它们的数据结构类的真正好处是定义它们的简单性。 一个示例声明是data class User(val name: String, val age: Int) 。 这不仅为您设置了所有属性,还自动定义了equals()hashCode()toString() (形式为"User(name=John, age=42)" ))和一个特殊的copy()功能,这是所讨论此处 。

物产

Kotlin当然具有属性。 实际上,使用属性比拥有简单的公共字段要容易。 它们的属性为您自动创建后备字段,其名称与属性相同,但下划线开头。

默认为public

说到方法,情况就是这样,我很高兴。 好极了!

类型对象

是的,他们已经删除了直接访问基元的权限,并且您仅使用类型对象(由于使用了空安全措施,因此它比平时更安全,我将在稍后介绍。

列表,字典和集合文字

Ko,Kotlin没有收集集合文字。 令人遗憾的是,但是,借助Kotlin的某些功能,您可能会创造出非常简单的方法来内联其创作。

我忘记的事情

这些是我知道我想用Java编写的几件事,但忘了放在旧帖子中

控制流表达式

当可以将一种语言中的控制流结构制成表达式(返回值)时,我喜欢它。 当然,Java(和许多其他语言)具有三元运算符,可以将if-else块看作是表达式,但仅限于单个“ if”检查。 它不允许没有难以理解的嵌套的“ else if”块。

但是Kotlin不会因为if块而停下来。 它们还执行try-catch表达式和“ when”表达式(在下一节中说明)。 使用try-catch作为表达式时,可以缩短一些需要在计算周围使用try-catch块的分配。 所以代替

Integer a;
try
{a = Integer.parseInt(input);
}
catch(NumberFormatException e)
{a = null;
}

你可以输入

Integer a = try { Integer.parseInt(input); } catch (NumberFormatException e) { null; }

显然,您不需要将它们用作表达式。 您仍然可以按照自己的意愿使用它们。

模式匹配

之前提到过“ when”表达式,但是现在我们真的要深入探讨了。它在Kotlin中用于模式匹配,并使用更简化的语法替换了switch-case块,这些语法也可以像if-else表达式一样工作,但用途更广。 它可以与切换块类似地起作用,因为它可以继续到下一个“ case”,但是必须使用显式的continue命令来完成(现在大约是时候“ switch”的默认设置为不继续流动,但是即使这样不需要那么多的东西,因为您可以简单地用逗号分隔多个可能性,使它们全部都采用同一分支。请在此处查看 。

它不是某些功能语言定义的模式匹配,但据我所知,这是您可以在OO语言中做到的最好的选择。 我也伤心地报告说,尽管有体面的模式匹配,这是伟大的递归函数,Kotlin似乎并不具有尾调用优化。 然而(?)。 Kotlin还很年轻。 也许它将使它走到尽头。

类扩展

无检查异常

我当然不介意抛出可能的异常的声明,也许是编译器警告让我们知道我们没有处理或声明可能的异常被抛出,但是我当然不想被强迫“处理”。 ”实际上不会引发的异常。 所以,我很高兴Kotlin没有任何东西。

命名和默认参数

当您可以为参数使用默认值时,重载函数几乎是没有意义的;当参数的含义不明显时,能够在传递参数时命名参数可以使读取函数调用更加容易。

我从未意识到的事情

现在,我将列出Kotlin提供的一些最酷的东西,我什至从未意识到这是一个好主意。

空安全

除非对象的类型明确声明其为null,否则不能将其设置为null。 在Kotlin中, List类型的对象不能为null,但是,如果它是List?类型的List? , 它可以。 这以及一些简单的语法使您可以安全地处理可为空的对象,从而使语言变得更加令人愉悦,几乎消除了NPE的可能性。

作为表达式功能

这个不是很大,但是它可以减少简单的功能,以清晰的方式占用更少的空间。 如果函数的主体只是一个表达式(无论是简单表达式还是“ when”表达式之类的复杂表达式),则可以跳过主体周围的花括号,而在其前面加上= 。 例如:

fun powerOf(number: Int, exponent: Int): Int
{return Math.pow(number, exponent)
}

可以改为:

fun powerOf(number: Int, exponent: Int): Int = Math.pow(number, exponent)

这没什么大不了的,但我喜欢它不仅可以让您切换=的花括号,而且还可以让您跳过使用return语句。

奥托罗

所以,这就是我对Kotlin的热爱。 您应该在他们的官方页面上查看一下,并告诉我您的想法。 我对此感到非常兴奋,并计划在完成当前项目后切换到该项目,您可以期望下周在我的帖子中听到一些信息。

翻译自: https://www.javacodegeeks.com/2015/03/i-found-my-java-remake.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio使用说明

声明: 本博客文章原创类别的均为个人原创,版权所有。转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com。 凌晨的Google I/O大会上,宣布了Android Studio,引起了现场开发者的一片欢呼。那么&#x…

有些窗口底部被任务栏挡住了_开始使用 Tint2 吧,一款 Linux 中的开源任务栏

Tint2 是我们在开源工具系列中的第 14 个工具,它将在 2019 年提高你的工作效率,能在任何窗口管理器中提供一致的用户体验。-- Kevin Sonney每年年初似乎都有疯狂的冲动想提高工作效率。新年的决心,渴望开启新的一年,当然&#xff…

从jHiccup开始

写完“如何在生产中检测和诊断慢速代码”一文后,我受到读者的鼓励,尝试从Azul系统尝试jHiccup 。 去年,我参加了jHiccup的创建者Gil Tene的演讲,探讨了测量延迟的正确方法,其中,他向我们介绍了jHiccup。 它…

nullnull使用PL/SQL获取创建用户的语句

在写这篇文章之前,xxx已经写过了几篇关于改nullnull主题的文章,想要了解的朋友可以去翻一下之前的文章 Create procedure: create or replace procedure get_case_sqls_for_ddls_ver1 ascursor get_username isselect username from dba_users;beginfor l_user in g…

axios发送post数据后台收不到_使用axios post 提交数据,后台获取不到

https://www.cnblogs.com/yiyi17/p/9409249.html(copyhttps://www.cnblogs.com/loveyaxin/p/8385694.html(copy问题场景场景很简单,就是一个正常 axios post 请求:axios({headers: {deviceCode: A95ZEF1-47B5-AC90BF3},method: post,url: /api/lockServe…

在JDK 8中连接字符串

JDK 8引入了语言功能,例如lambda表达式 , 流 ,甚至是新的Date / Time API ,这些都会改变我们编写Java应用程序的方式。 但是,还有一些新的API和功能可能不太“改变游戏规则”,但仍为Java编程语言带来了更大…

华为内部面试题库---(6)

1.在SMP体系结构中,中断亲和性是指将一个或者多个中断绑定到特定CPU core上运行,下列说法错误的是:A.每个硬件设备都会在/proc/irq下有个中断号命令的目录来标志中断亲和性B.IRQ#目录下smp_affinity文件,通过设置CPU位掩码&#x…

基元需要走吗?

我目前正在使用JSF作为视图技术,使用JPA作为持久层的企业应用程序。 它可能是支持bean或服务方法中的某种东西,但令我震惊:是否有充分的理由在企业应用程序中使用原语? 当我开始围绕J2SE 1.2使用Java进行编程(或者是J…

输入参数_太实用!输入参数1秒算出功率,这款计算工具又快又准

随着互联网红利的不断加深,到了后期,不断地各种工具开始涌现,方便了很多用户,填补了市场上的很多空白,有生活娱乐类、提高效率类、垂直专业类、系统工具类等等。工业行业作为各行各业的大头,机械化、智能化…

功能工厂模式

您是否需要一种非常快速的方法来制作Factory对象? 然后,您需要lambda或其他函数传递! 它不仅快速,而且非常简单。 我敢打赌,如果您对Lambdas相当满意,那么您只需阅读标题就可以做到这一点。 如果您是其中之…

指向二维数组的指针测试

定义a为二维数组后,有三种成份:数组本身、3个一维数组(a的每一行对应一个一维数组)、12个数组元素, 由此就有三种指针及对应的指针变量, &a和int (*p1)[3&#xff3d…

python视频流传输_基于OpenCV的网络实时视频流传输的实现

很多小伙伴都不会在家里或者办公室安装网络摄像头或监视摄像头。但是有时,大家又希望能够随时随地观看视频直播。大多数人会选择使用IP摄像机(Internet协议摄像机)而不是CCTV(闭路电视),因为它们具有更高的分辨率并降低了布线成本。在本文中,…

如何编写NetBeans插件

是否想在NetBeans IDE中添加功能或自动执行某些操作? 跟随我们编写您的第一个NetBeans插件。 让我们超越简单的工具栏示例 ,创建一个可以自动更新的插件。 该代码基于NetBeans的WakaTime插件 。 我们的示例插件将仅打印Hello World语句,并在…

单机最大tcp连接数

单机最大tcp连接数 网络编程 在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少? 如何标识一个TCP连接 在确定最大连接数之前&#xf…

用了fastapi还需要nginx_nginx 与 fastdfs 的配置过程,已经越过了许多坑,我跪着进入了欢迎页面。。。...

nginx 与 fastdfs 的配置过程,已经越过了许多坑,我跪着进入了欢迎页面。。。上面的是 fastdfs 与 nginx 的官网,我从这里面跌跌撞撞的走出来了,下面是我总结出来的一条平坦的路,小伙伴们可以参考参考。我下面的攻略其实…

Spring Batch教程–最终指南

这是Spring批处理教程,它是Spring框架的一部分。 Spring Batch提供了可重用的功能,这些功能对于处理大量记录至关重要,包括日志记录/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管…

Neurocomputing 投稿注意事项

1. *.tex 和 *.bib 都以Manuscript项(Item)提交 (abstract.tex除外)2. abstract.tex以Abstract项(Item)提交3. *.eps以Figure项(Item)提交4. biographies.pdf以Biography of the aut…

箱式图 添加异常值平均值_什么是脏数据?怎样用箱形图分析异常值?终于有人讲明白了...

导读:数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础。没有可信的数据,数据挖掘构建的模型将是空中楼阁。数据质量分析的主要任务是检查原始数据中是否存在脏数据…

[编程相关]正则表达式Regex语法

--目录-- 0. 前言1. 正则语法2. 正则搜索语法(1)字符集 Character_Classes(2)锚定符 Anchors(3)计数 Quantifiers(4)分组与索引 Group_And_Reference(5)周围 …

窗口程序ImageView(仿QQ图片查看器)

近期一直在学习窗口程序之类的问题,下午正好有机会和大家讨论一下. 程序运行截图: 应用方法: 1、直接把图像文件拖到图标上表现 2、通过命令行方式,示例:ImageView.exe "带全路径的图像文件名称" 3、打开ImageView.exe&…