kotlin.如何让我成为一个更富有成效的软件开发人员

kotlin.如何让我成为一个更富有成效的软件开发人员

我现在一直在写七年以上的JVM代码,我主要使用Java。当我拿起kotlin时,大约两年前发生了变化。到目前为止,我设法将Java语言更加或不那么支持彩票3d字谜。我这样做是因为我对这种语言更加富有成效。它让我更多地关注业务逻辑,而不是强迫我一遍又一遍地地编写样板代码。在这篇文章中,我告诉你彩票3d字谜如何让我成为一个更富有成效的开发人员。
我当然知道彩票3d字谜比我知道Java更好。 FWIW,我已被Oracle返回Oracle作为Java专家被认证。仍然,彩票3d字谜成为我的本机编程语言,我想鼓励您考虑它。当我谈论我的kotlin生产力时,这可能是基于个人情绪。当我在1.0之前拿起语言时,我处于特定情况下,在1.0之前被发布,并且从那时起就曾担任一名教师。尽管如此,我相信,有利于彩票3d字谜的一些争论适用于更多你,所以让我们看看我在说什么。

我的JVM背景

我在多年中使用了Java,并用语言写了很多富有成效的代码。 Java是我的第一语言,我在那一点时不知道其他语言。尽管没有看到许多其他语言,但在使用Java时,我从未真正感到过多的快乐,这在Java 8于2014年回到后来。我立即爱上了语言中加入的功能方面,并遍布了λ和溪流我们的代码库。可能有一些情况,我不应该这样做,但它是流血的java边缘,我喜欢它。那时,我开始研究其他JVM语言,并在某些时候开始学习Scala。我开始阅读它的文档起初很有趣,但然后快速开始变得可怕。我从来没有真正把它送给它,但回头看,我不后悔在几个星期后把它放开。

kotlin.

我不记得第一次听到彩票3d字谜的地方。我唯一的事情 请记住,Jetbrains与之相关。我一直是他们的产品的粉丝,所以很明显,我不得不调查他们创造的语言。除了Scala之外,彩票3d字谜有一个非常可消化的文档,当我读它时,它从未得到可怕。我记得我在只有几天内仔细阅读它,并且有两个主题我并不直接理解并为以后加以书签。其中一个主题正在备份领域,另一个主题与委派支持有关。
另一件事使其超级易于接送彩票3d字谜是Intellij中的优秀支持。我通过IDE和文档学习了语言。我完全推荐的另一个资源是这本书 kotlin在行动中 这也帮助我了解了更好的语言的内在工作。

标准库

kotlin. has a fantastic standard library. If you think that Java also does, I can assure you that it is much weaker than 彩票3d字谜's. You won't need external libraries for everyday tasks like checking whether a String is blank or copying streams around. 彩票3d字谜 provides all that and much more. It comes with an extremely sophisticated collections API, defines commonly needed extension functions on default types and finally gives the developer the option to add their own functions via extensions. You can find an excellent article on a bunch of standard functions 这里 for example.

功能丰富的语言

这一个应该是显而易见的。特别是当你来自像Java这样的语言时,你将被彩票3d字谜提供的清脆功能祝福。考虑Null-Safety,扩展功能,更容易的泛型或其Catchy并发意味着 金属卷曲 例如 - 他们都让我们更加富有成效,使语言更愉快。

kotlin.是直观的

由于奇妙的标准图书馆和丰富的功能集,彩票3d字谜是一种非常直观的语言。通常,您可能会尝试在给定类型上执行一些操作,并查看IDE所建议的现有功能。然后,它经常碰巧找到您正在寻找的功能已经定义。这将是 string :: substringbefore., 文件扩展名 或者 erable :: toset..

功能风格

当我们谈论标准库并自行的语言本身有多直观时,我们也想提到语言的功能方面。在这部分中,我特别想专注于功能。正如您所知道的那样,功能是彩票3d字谜的一流公民。您可以声明包含它们的变量,传递它们,甚至从其他功能返回函数。在每个彩票3d字谜代码库中,您可以在每个彩票3d字谜代码库中找到lambdas(未申报和直接传递的函数)。它们也在彩票3d字谜标准库中大量使用。其中一个示例是非常有用的范围函数集,您可以了解它 这里。当然,Lambdas是集合API的重要成分,即,所定义的东西 kotlin.collections, as well. I can't even tell how many times I use these functions in my day to day work. It somewhat gives me the creeps when I think about transforming collections within traditional for loops and how difficult it was to perform similar tasks in Java, especially before Java 8. Let's see an example in action. Let's assume we have some table/grid data modeled as follows:

例子


data class Grid(val rows: List<Row>)
data class Row(val data: List<Column<*>>)
data class Column<T>(val name: String, val value: T)

A Grid has multiple Rows which consists of multiple Columns. The task would be to calculate the totals for every given column identified by its name:


有趣的计算(数据:网格)= data.rows
    .flatMap(Row::data)
    .groupingBy(Column<*>::name)
    .fold(0.0){累加器,(_,值) - >
        累加器+(值){
            is Number -> value.toDouble()
            else -> 0.0
        }
    }

使用来自彩票3d字谜标准库的功能,我们可以执行以下操作:
1.使用单个集合中的所有行收集所有列 平底图
2.按照他们的名称组分组这些列 groupingBy
3.通过总结其值来累计列

以上只是一个简单的例子,即展示了与给定的集合功能可以做的事情。正如我之前所说,我每天都使用这些功能,我使用它广泛,我不想再错过它了。

您需要编写更少的代码

功能规划风格最大的优势之一是您必须整体编写更少的代码。您使用所谓的内部迭代,而不是明确指定如何迭代给定集合。在开始时循环声音很容易,每个人都应该能够正确地应用它们。尽管如此,它们很容易导致难以找到的错误,这是样板代码的常见问题。功能API的想法是您可以专注于 什么 而不是这一点 如何和thus don't iterate collections explicitly but rather use functions like map, filter etc. which handle the iteration for you.

更少的样板 - 一般的错误更少

Boilerplate代码可以是错误的来源;当然,您需要编写的代码越多,可以创建越潜在的错误。由于彩票3d字谜消除了许多繁琐的样板代码的必要性,因此语言使您将介绍较少的逻辑错误。这是一个很好的例子是单身图案。正确实施它并不像你想象的那么简单。您必须处理同时访问单例,这使得难以实现此类对象的初始化代码。在此问题有不同的方法,所有这些都会在手动写入时造成潜在问题。 kotlin,通过它 object construct,摘要为开发人员提供此功能,并不要求您每次都编写重复的代码。

更容易调试和维护

虽然在Java中,您必须花费很多时间阅读和了解样板代码,但这并不是那么kotlin的一个问题,因为已经提到的同样的原因是:一组复杂的特征和更简洁的语言。将现有的Java代码基于彩票3d字谜移动到彩票3d字谜缩短了代码大小 ~40% 如果正确完成。当然,这使得彩票3d字谜代码更容易阅读,调试和维护。要公平,很容易滥用丰富的功能集,如果没有小心,可能会导致难以读取的代码。所以不要为你编写代码,而是必须在将来维持它的人。

很有趣

上面提到的所有原因让kotlin是一种乐趣的语言。务实的,简洁和直观的语言是程序员可以想到的最佳工具,你不应该使用其他任何东西。乐趣会自动导致更多的生产力。

在打电话给自己的彩票3d字谜开发人员之前,你应该做什么

我想注意,我认为准确了解工具集非常有帮助。我花了很多时间来学习彩票3d字谜,主要是它如何工作以及它提供的功能,每个人都应该在编写严肃的彩票3d字谜代码之前做。作为Java开发人员,您可以快速编写编译彩票3d字谜代码,但这仍然不同于编写惯用kotlin代码。对于Google一直没有足够的谷歌邮寄。您应该在入门前加入一些基本技术。我建议在几天内学习完整的彩票3d字谜文档。在那之上,这本书 kotlin在行动中 是您可以找到的最好的资源,我强烈推荐它。

结论

让Java有利于彩票3d字谜改善了我的编程技巧,并使我一般更加富有成效。我感觉更多的快乐,介绍更少的错误,并且比我用Java的误差越来越少。我不想说只有彩票3d字谜也可以为你做这件事。但是,也许是时候开始使用更加现代的语言来扩大你的地平线,并在侧面变得更加富有成效。

18 thoughts on “kotlin.如何让我成为一个更富有成效的软件开发人员

  • Jan Vladimir Mostert.

    同样的,我把Java放在2016年底的好的结束,从未回头过
    java8也让我调查了其他语言,实际上是更多的,这已经是一个改进的java8语法,不知何故,我遇到了kotlin,刚刚立即被迷上了,即使零安全是尴尬,而且许多功能概念都花了很多功能概念习惯。

    期待着多平台变得更加成熟,彩票3d字谜JVM,彩票3d字谜js和彩票3d字谜上的Android已经很棒,它终于感觉就像我一样’m实际上解决业务问题而不是通过空检查和其他样板逐渐减少。

  • 彼得

    很多你’这里列出的已在.NET中存在,并且已经很长一段时间了。一世’LL从未真正了解行业与Java的痴迷,直到有人对其产生了真正的最终论点’仍在使用,我’我只是假设它’因为很多遗留事情都在Java,那开发商(和经理)唐’T想要将时间或金钱投入交换平台,特别是从Intellij到Visual Studio。

    也许我’m错误,java是一种很棒的语言– but I’通过ASP.NET可以使用大约一半的代码来编写RESTful的服务,因为将在等效的Java中使用– based service.

    • Java不是一种很棒的语言,但Java虚拟机是一个很棒的平台,它被广泛采用,具有非常复杂的工具和框架。我也认为,语言明智,C#比Java更好。对于我来说,它绝对不会是彩票3d字谜的替代品。大学教师’t @ me 🙂

    • Martijn Vos.

      不,Java并不那么大。 JVM很棒。 Java只是无处不在。它比在它之前存在的更好,在JVM中,它提供了一个稳定但灵活的平台来开发。但Java语言太冗长了,并且由一些不良决策的遗产负担。一种与现有的Java代码无痛的新JVM语言将是一个很好的主意。

      在过去,我希望Groovy(不错,但太慢)或Scala(快速,华丽,但偶尔恐怖)是那个出色的想法。我没有’尚未与彩票3d字谜一起工作,但它听起来可能是Java,Groovy和Scala之间的完美中间地面。

    • 你不’T看到Java Devs去Dotnet论坛涂抹他们的平台。但是每当文章出现赞美的JVM语言都是DotNot Lone Ranger说网更好,Blah Blah Blah。我们’重复对微软不感兴趣’S CopyCAT平台创建的唯一目的是窃取Java’s mindshare.

      • 莫吉尔

        只是试着学习关于C#的一些东西,并给它提供一些实践,你会看到产品如此不同,所以你的答案不能认真对待。 C#实际上是非常创新的语言,如果他们复制了一些想法的子集’对每个人都很好。毕竟,谁没有现在复制…

  • 嘿,谢谢你与kotlin语言分享自己的感受和经验!

    我喜欢你已经提到的所有事情:

    kotlin.的直观,
    功能包装有用的标准库,
    作为没有Scala的过分普遍的一流公民)
    更少的样板:我可以专注于业务逻辑而不是无关的细节,
    更多地关注“什么”而不是“如何,”
    这更有趣(我最初来自像Python,Ruby,Scala和Clojure这样的非Java Lang,所以我在彩票3d字谜编程时感觉到“在家里”)。

    最重要的是,我想提到以下kotlin专业,让我的生活更简单:

    双向互操作性与JVM生态系统,允许我使用成熟的库和框架;
    类型推断(不仅适用于本地变量):这允许您选择在您的代码中指定更多类型的详细信息,并且当您希望它们被隐藏时,因为它们只是读者的角度来说,他们会产生噪音;
    不变性是Operandi的默认模式:“val”是唯一只有在必要时升级到“var”之前的默认选项,在升级到“ulableRistof”时才是默认选项;
    很少使用DSL对于非常特殊的问题(以及库);
    命名参数和默认参数值的组合对于减少复制并拨打非常可读性非常有用,并让它们仅关注对读者的重要性;
    智能铸造在任何类型检查后,允许您不要使用直接的类型(或无效展开):在其他类型的语言中,这是一个非常讨厌的问题,彩票3d字谜优雅地解决了它;
    最后但并非最不重要的是,kotlin是一个简洁的语言,它不会一路(如scala或其他人),而是发现一个非常好的平衡,它简洁,让开发人员最大化代码的可读性,而且没有妨碍这样做。如果它太简洁,或者不充分简洁,它将使得编写可读代码并专注于业务逻辑更具挑战性。

    在我在彩票3d字谜工作了2年后,我不得不回到Java项目,没有机会转换(情况,不要问!),与溪流,术语和样板一起工作是如此痛苦我疯了,非常沮丧。

    我期待着更加全球kotlin在后端采用。

  • 托尼C.

    我一直在去年使用彩票3d字谜 for Android开发,也是彩票3d字谜 / Native / 彩票3d字谜 Multiplatform!
    彩票3d字谜的优势已经记录在内,但一个额外的好处是彩票3d字谜到C接口,这是什么都没有辉煌。在kotlin本机中编写Mac应用程序时,我能够调用Object-C API或POSIX C API,从CString将C内存分配给彩票3d字谜字符串。结果是可读的代码,对代码有趣和快速!我的桌面应用程序(测试工具)创建了Android仿真器,安装/卸载的APKS并将数据传递给运行的Android应用程序“adb and am”出于Android SDK。我打电话给Android SDK“adb”使用System()的彩票3d字谜本机,这是一个像我一样旧的C函数。我喜欢这种语言,并拒绝任何不包括在日常编码彩票3d字谜的工作。我注意到它难以表达彩票3d字谜帮助,直到开发人员每周花一个星期就足以将它们转变为彩票3d字谜 Fanatics!它不止一个“better Java”是一个很好的跨平台开发解决方案!

  • 麦克风

    感谢你的分享。大约2年前也转换,并在彩票3d字谜训练了3支球队。他们的经验是相似的。大学教师’除非被迫,否则想要代码Java。

    对于书籍,同意彩票3d字谜的行动很棒。一世’D还建议读者查看Venkat Subramaniam的更新书。“Programming 彩票3d字谜”在务实的程序员(务实书架)。它’s在beta,但也完成。涵盖1.3包括金属版。

  • Aya.

    感谢提供这篇好文章!我是一名java开发人员,开始今年学习彩票3d字谜。

    我有一个关于阅读的小问题“彩票3d字谜 in Action ”书,真正理解的时间有多长时间做练习?

  • jhelp.

    有趣的计算(数据:网格)= data.rows
    .flatMap(Row::data)
    .groupingBy(Column<*>::name)
    .fold(0.0){累加器,(_,值) - >
    累加器+(值){
    is Number -> value.toDouble()
    else -> 0.0
    }
    }

    可能看起来很酷,但你知道什么是什么“flatMap” and “groupBy” ?

    您很幸运有一个小清单,因为每个方法都会创建一个新的列表或新的地图和批量级。所以在记忆和性能中它很可怕。

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *