java 指令重拍_我发现我的Java重拍了!

java 指令重拍

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

但…

但是,后来我找到了Kotlin。 它是由IntelliJ,PyCharm和其他一些IDE和工具的创建者JetBrains制造的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

java 指令重拍

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

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

相关文章

java post webservice_[java.webservice] 如何通过HttpPost从服务器上获得一个sessionid

javas Web Service is different from HttpPost, HttpGet and HttpResponse that kind of things. It is more easy to pass anything, any Object you like.如果要利用Web Service返回一个sessionid的话,可以使用从Server返回返回值的形式,也可以在Clie…

C 常见的面试知识点(下)

inline 内联函数的特征相当于把内联函数里面的内容写在调用内联函数处;相当于不用执行进入函数的步骤,直接执行函数体;相当于宏,却比宏多了类型检查,真正具有函数特性;编译器一般不内联包含循环、递归、swi…

php cdi_集成CDI和WebSockets

php cdi考虑尝试一个简单的Java EE 7原型应用程序,该应用程序涉及JAX-RS(REST),WebSockets和CDI。 注意 :不想让它成为破坏者-但本文主要讨论我在尝试使用Web套接字和使用CDI作为“胶水”(在Java EE应用程…

c语言排序方法有哪几种?

c语言排序方法有:1、简单选择排序,基于O(n2)时间复杂度的排序算法;2、冒泡排序;3、简单插入排序;4、希尔排序;5、归并排序,基于归并操作的一种排序算法;6、快…

java 类型不可视_jvm高级特性(5)(1)(原子性,可见性,有序性,volatile,概述)

简介:阿姆达尔定律(Amdahl):该定律通过系统中并行化与串行化的比重来描述多处理器系统能获得的运算加速能力。摩尔定律(Moore):该定律用于描述处理器晶体管数量与运行效率间的发展关系。当价格不变时,集成电路上可容纳的元器件的数…

工程模式和抽象工厂模式_功能工厂模式

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

c语言怎么输入3个数输出最大值

方法:首先使用scanf()接收从键盘输入的三个数;然后使用“if else”语句比较三个数的大小,获得最大值;最后使用print()函数将最大值输出即可。c语言输入3个数输出最大值#include int main() { // 输入abc输出最大值 int a; …

java调用ecdh_椭圆曲线ECC ECDH原理 javacard实现

椭圆曲线原理:椭圆曲线的图像并不是椭圆形,椭圆曲线源自于求椭圆弧长的椭圆积分的反函数。定义:椭圆曲线可用下列方程来表示,其中a,b,c,d为系数。E: y2 ax3 bx2 cx d椭圆曲线运算:(相当于交换群)AB&#x…

C 常用新特性(上)

下面是正文:auto类型推导auto可以让编译器在编译器就推导出变量的类型,看代码:利用auto可以通过右边的类型推导出变量的类型。什么时候使用auto呢?简单类型其实没必要使用auto,然而某些复杂类型就有必要使用auto&#…

等级保护测评工作重点难点_重点保护

等级保护测评工作重点难点在“ Java的一些句子 ”一文中,我写道: “受保护的方法和字段可以在同一包中的类中使用(到目前为止与私有包相同),此外,还可以从其他类中使用受保护的方法和字段,这些类…

c编译程序是什么?

c编译程序是由计算机厂家提供的一套软件。c编译程序又称c语言编译器,是指用c语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。编译程序属于采用生成性实现途径实现的翻译程序。它以高级程序设计语言书写的源程序作为输入,而以…

运动基元_基元需要走吗?

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

mysql 三种工作模式_mybatis三种批量插入方式对比【面试+工作】

准备:1.表结构CREATE TABLE t_user (id varchar(32) CHARACTER SET utf8 NOT NULL COMMENT 主键,name varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT 用户名,del_flag char(1) CHARACTER SET utf8 DEFAULT NULL COMMENT 删除标示,PRIMARY KEY (id)) ENGINEI…

C 常用新特性(下)

多线程什么是多线程这里就不过多介绍,新特性关于多线程最主要的就是std::thread的使用,它的使用也很简单,看代码:这里记住,std::thread在其对象生命周期结束时必须要调用join()或者detach(),否则程序会term…

ant 路径_在Ant中显示路径

ant 路径在博客文章Java and Ant Properties Refresher和Ant <echoproperties /> Task中 &#xff0c;我写了一篇关于如何了解Ant构建如何看到属性的文章&#xff0c;这有助于更好地理解该构建。 通常情况下&#xff0c;在构建过程中看到构建中使用的各种路径也很有价值&…

java8默认垃圾回收器,Java 8的默认垃圾收集器

What is the default garbage collector for Java 8?When I check the JMX Beans, they reveal it to be the parallel collector for the new generation and the old serial collector for the old generation.解决方案Selecting the default garbage collector (among othe…

c语言中结束本次循环的语句是什么

c语言中结束本次循环的语句是“continue”。控制语句continue只能作用于循环体中&#xff0c;其作用是结束本次循环&#xff0c;跳到判断循环的位置&#xff0c;即重新开始下一次循环。在C语言中&#xff0c;控制语句“continue”用于循环体中结束本次循环&#xff0c;重新开始…

jdk8 字符串_在JDK 8中连接字符串

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

C语言中要改变循环语句的流程可以使用的语句有哪些

C语言中要改变循环语句的流程可以使用的语句有&#xff1a;break&#xff0c;continue和goto。break语句可以终止循环而执行整个循环语句后面的代码&#xff1b;continue语句可以跳过循环体中剩余的语句而强制进入下一次循环。break关键字当 break 关键字用于 while、for 循环时…

apk图标存放位置_安卓系统下安装完apk程序后,具体的文件夹位置在哪里呢?

展开全部 有的程序的文件夹是自动建立在sd卡上的,有的程序是没有文件夹的,程序位于32313133353236313431303231363533e59b9ee7ad9431333365666238date/app文件夹内,而系统的程序位于system/app文件夹内。 软件安装完成后,就会在date/app目录出现一个apk文件。 这个文件相当…