Kotlin 是后端开发的未来

Kotlin 是后端开发的未来

kotlin-logo

严格类型、命名参数、多范式语言
您今天遇到的每个后端开发人员都会说他们使用 JavaScript、Python、PHP 或 Ruby 编写代码。近年来,您会遇到一小部分人转而使用 Kotlin 作为他们创建 Web 服务器的语言选择。由于我在学习Ktor,所以本文中的示例将使用Ktor进行说明。

为什么选择kotlin?

Kotlin 是一种多范式编程语言。它支持来自其他各种语言的许多不同语言特性。如果缺少某个功能,在 Kotlin 中创建包含它的代码并不困难。例如,Haskell——一种纯函数式语言——使用.将两个函数组合在一起。在 Kotlin 中,您可以编写一个执行确切行为的函数。你可以在这里读更多关于它的内容:

将Kotlin函数与函数一起使用
https://medium.com/codex/mix-up-your-kotlin-functions-with-function-composition-c0f635d40c87

协程

协程是轻量级的类似线程的操作,在并发和编写异步代码方面表现良好。与 Java 不同的是,Kotlin 摒弃了多线程的思想,采用了挂起函数和协程的方式。

协同程序的执行速度更快、效率更高。也有可能在同一个线程中执行多个协程。

fun main() = runBlocking { // this: CoroutineScope
    launch { // launch a new coroutine and continue
        delay(1000L) // non-blocking delay for 1 second (default time unit is ms)
        println("World!") // print after delay
    }
    print("Hello, ") // main coroutine continues while a previous one is delayed
}

命名参数

在 Kotlin 中,您可以通过使用参数名称及其值来调用函数,而不考虑参数的顺序。这使得代码具有很高的可读性和更易于调试。在函数定义中使用默认参数命名参数需要高度的灵活性。

fun Application.configureRoutes() {
  routing {
    route("/greet") {
      get {
        call.respondText(
          text = "Hello, World!",    // <- named parameters
          status = HttpStatusCode.OK
        )
      }
    }
  }
}

上面显然不是最好的代码,但它展示了命名参数的用法。

扩展函数

您在上面看到的也是扩展函数的示例。

在其他编程语言中,您不能向现有类(这是一个只读文件)添加函数。但是,在 Kotlin 中,您可以定义扩展函数,它们的行为就好像它们是该特定类的成员一样。

fun String.countDigits(): Int {
  return this.count { it in '0'..'9'}
}

fun main() {
  println("hello1234".countDigits())
}

我无法更改 的定义String,但可以使用用户定义的函数对其进行扩展。

数据类

在处理后端开发时,数据类非常重要。它们(带有列表)很容易序列化为 JSON 数据。数据类用于创建具有原始数据类型的模型对象。当且仅当它们也是数据类(可序列化)时,才可以使用复杂数据类型。

使用数据类的好处是

  • toString自动生成。
  • equals生成比较其属性内容的函数。
  • copy将属性复制到新对象中的内置函数。
class Order(
  val number: Int,
  val items: List<String>
)

data class OrderData(
  val number: Int,
  val items: List<String>
)

fun main() {
  val ord1 = Order(1, listOf("Banana"))
  val ord2 = Order(1, listOf("Banana"))

  val ord3 = OrderData(2, listOf("Apple"))
  val ord4 = OrderData(2, listOf("Apple"))

  println(ord1) // Order@65b54208
  println(ord3) // OrderData(number=2, items=[Apple])

  println(ord1 == ord2) // false
  println(ord3 == ord4) // true

  val ord5 = ord1.copy() // Compilation error
  val ord6 = ord3.copy( 
    items = ord3.items + "Orange" // Modifying the items property
  )
  println(ord6) // OrderData(number=2, items=[Apple, Orange])
}

请注意我是如何使用命名参数来指定在复制数据类实例时需要更改的属性的。

Kotlin DSL

Kotlin DSL 是 JetBrains 实现的一项出色功能。这使您可以使用 Kotlin 轻松地为任何其他语言创建代码。例如,如果您希望通过传入请求发回 HTML 文件,您可以在 Kotlin 中编写 HTML DSL 代码并返回其字符串表示形式。

导入正确的依赖项后,您可以编写 DSL,如下所示:

fun  main () {
   val htmlContent = html {
    head {
      title { + "This is Kotlin DSL" }
      style {
        css( ".color-red" ) {
          color = "#ff0000"
         }
        css( "h1" ) {
          cursor = "pointer"
           fontSize = "2.5rem"
         }
      }
    }
    body {
      h1 {
        + "标题 1 有 2.5rem 大。" 
      }
      p(className = "color-red"

        b { + "和粗体" } 
      } 
    } 
  } 

  println(htmlContent) 
}

Kotlin的Build DSL将改变你的编程方式
https://medium.com/codex/kotlins-builder-dsl-will-change-the-way-you-code-931ecd03012d
kotlin dsl

Kotlin 后端库

已经有许多库可供 Kotlin 爱好者使用。最受欢迎的是:

ktor

我上面的一些例子说明了 Ktor 的使用。

Ktor 是一个框架,可以轻松构建连接的应用程序——Web 应用程序、HTTP 服务、移动和浏览器应用程序。现代连接的应用程序需要异步才能为用户提供最佳体验,而 Kotlin 协程提供了很棒的工具来以简单直接的方式做到这一点。

【ktor】https://ktor.io/docs/welcome.html
ktor

http4k

http4k 服务器只是一个常规函数,它被请求调用并返回响应。

https://www.http4k.org/
http4k

Javalin

一个简单的 Java 和 Kotlin 网络框架

https://javalin.io/
在这里插入图片描述

Spring

在您的应用程序中使用 Spring Boot,只需几行代码就可以像老板一样开始构建服务。

https://spring.io/
spring

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目部署---shell脚本自动部署项目

通过shell脚本自动部署项目 操作步骤&#xff1a; 在Linux中安装Git在Linux中安装maven编写shell脚本&#xff08;拉取代码、编译、打包、启动&#xff09;为用户授予执行shell脚本的权限执行shell脚本 执行过程&#xff1a;Linux服务器&#xff08;编译、打包、启动&#x…

巧用千寻位置GNSS软件|点测量状态栏与工具栏全解析

众所周知&#xff0c;点测量是提供点位坐标多种模式测量、测量模式切换、测量数据简单成图等多种方式的点位地理信息测量功能。下面我们来解析在千寻位置GNSS软件中点测量功能下的各状态栏和工具栏。图5.1-1点击【测量】->【点测量】&#xff0c;如图5.1-1 所示&#xff0c;…

面向削峰填谷的电动汽车多目标优化调度策略

说明书 MATLAB代码&#xff1a;面向削峰填谷的电动汽车多目标优化调度策略 关键词&#xff1a;电动汽车 削峰填谷 多目标 充放电优化 参考文档&#xff1a;店主自己整理的说明文档&#xff0c;公式、约束、数据齐全&#xff0c;可联系我查看 仿真平台&#xff1a;MATLAB YA…

Android 设置背景颜色透明度

前言 本章是对设计给出的颜色做透明度的处理 原因 一般情况下我们是不需要做处理的&#xff0c;那为什么又需要我们做透明度呢&#xff0c;原因就是咱们的设计小哥哥、小姐姐们没有自己做处理&#xff0c;如果处理了的话&#xff0c;我们直接使用设计标注的AHEX颜色就行&a…

Vue+echart 图根据网页自适应resize缩放

const chartBar null;data{return {chartBar :null} }//关键代码activated() {// 由于给echart添加了resize事件, 在组件激活时需要重新resize绘画一次, 否则出现空白bug// if (this.chartBar) {this.chartBar.resize();// }},chartBar echarts.init(document.getElementBy…

信息安全和网络安全

安全五要素&#xff1a; 机密 完整 并且能判断数据是否被篡改 可用 可控 可审查性 对于网络及网络交易&#xff0c;信息安全的基本需求是&#xff1a; 机密性完整性不可抵赖性 计算机系统安全保护的五个等级&#xff1a; 注释&#xff1a;其中的安全标记保护级是属于强…

【Spring】—Spring中Bean的配置、作用域

一、Bean的配置 Spring用于生产和管理Spring容器中的Bean&#xff0c;需要开发者对Spring的配置文件进行配置。在实际开发中&#xff0c;最常采用XML格式的配置方式&#xff0c;即通过XML文件来注册并管理Bean之间的依赖关系。 在Spring中&#xff0c;XML配置文件的根元素是…

深度学习在表面缺陷检测领域的应用

随着工业对原材料质量要求的提高&#xff0c;圆钢表面缺陷检测已成为工业生产的重要组成部分。 表面缺陷检测技术主要分为两类&#xff0c;即传统的无损检测方法和机器视觉检测方法&#xff0c;后者因其实时性和高精度而得到更广泛的应用。 作为现代工业生产的重要原材料&…

分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测

分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测 目录分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测分类效果基本介绍模型描述程序设计参考资料分类效果 基本介绍 MATLAB实现CNN-BiLSTM-Attention多输入分类预测&#xff0c;CNN-BiLSTM结合注意力机制多输…

【教程】解决VSCode中Python第三方库无法自动补全

背景 学习ROS的时候&#xff0c;发现ROS的第三方库无法自动补齐 解决过程 查询到的一个解决方法是&#xff0c;禁用Pylance扩展 禁用之后第三方库可以自动补齐了但是原来自带库的语法高亮消失了此解决方法不是上策 解决方法 打开 .vscode 文件夹下面的 setting.json 文件 …

QN88封装国产FPGA

QN88GW1N-9管脚名GW2A-18管脚名AL3S10EG4S201VCCVCCIO_L1_1VCC_12VSSVSSIO_L2_1IO_L1_13IOL2AVCCO7IO_L3_1,MOSI,D1IO_L2_14IOL5A/JTAGSEL_N/LPLL_T_inIOL7A/LPLL1_T_inIO_L4_1IO_L1N_15IOL11A/TMSIOR25B/TMSIO_L5_1,SPICSNIO_L1P_16IOL11B/TCKIOR26A/TCKINITNGND7IOL12B/TDIIO…

常见漏洞扫描工具AWVS、AppScan、Nessus的使用

HVV笔记——常见漏洞扫描工具AWVS、AppScan、Nessus的使用1 AWVS1.1 安装部署1.2 激活1.3 登录1.4 扫描web应用程序1.4.1 需要账户密码登录的扫描1.4.2 利用录制登录序列脚本扫描1.4.3 利用定制cookie扫描1.5 扫描报告分析1.5.1 AWVS报告类型1.5.2 最常用的报告类型&#xff1a…

Hive小文件问题

1、小文件产生的原因 数据源本身有很多小文件&#xff1a;reduce数量多导致生成的小文件增多&#xff1a;使用动态分区导致小文件增多&#xff1a; 2、小文件危害 HDFS内存资源消耗过大&#xff0c;并限制了数据存储规模&#xff1a;在HDFS中&#xff0c;具体的文件保存在da…

静态链表常用操作(节点计数/查找/增加/删除)

1.封装计算链表节点个数的API 代码心得&#xff1a; cnt是count的缩写&#xff0c;用来计数。节点&#xff0c;我们一般指的是链表中数据的地址&#xff08;指针&#xff09;。比如节点1就是第一个结构体的地址&#xff0c;节点2就是第2个结构体的地址&#xff0c;以此类推。…

Adaptive AUTOSAR架构和特性介绍

概述 本文主要内容分为两章节。第一章节简要介绍了AUTOSAR的软件架构,设计理念以及方法论,对Classic Platform和Adaptive Platform做了简单的比较。第二章主要介绍了Adaptive Platform的特性。 第一章 AUTOSAR架构介绍 AUTOSAR(AUTomotive Open System ARchitecture)是汽车…

MySQL性能优化(四)性能优化总结

文章目录连接优化服务端链接优化客户端连接优化配置的优化架构优化数据库高可用&#xff1a;数据库慢查询慢查询日志profiling工具表结构和存储引擎的优化存储引擎&#xff1a;表结构SQL与索引的优化案例- 执行计划 ExplainID序号select type查询类型type 针对单表的访问方法Sy…

ChatGPT 与 MindShow 一分钟搞定一个PPT

前言 PPT制作是商务、教育和各种场合演讲的重要组成部分。然而&#xff0c;很多人会花费大量时间和精力在内容生成和视觉设计方面。为了解决这个问题&#xff0c;我们可以利用两个强大的工具——ChatGPT和MindShow&#xff0c;来提高制作PPT的效率。 一、ChatGPT 与 MindShow…

Linux操作系统ARM体系结构处理器机制原理与实现

ARM 的概念ARM(Advanced RISC Machine)&#xff0c;既可以认为是一个公司的名字&#xff0c;也可以认为是对一类微处理器的通称&#xff0c;还可以认为是一种技术的名字。ARM 公司并不生产芯片也不销售芯片&#xff0c;它只出售芯片技术授权。其合作公司针对不同需求搭配各类硬…

ChatGPT惨遭围剿?多国封杀、近万人联名抵制……

最近&#xff0c;全世界燃起一股围剿ChatGPT的势头。由马斯克、图灵奖得主Bengio等千人联名的“暂停高级AI研发”的公开信&#xff0c;目前签名数量已上升至9000多人。除了业内大佬&#xff0c;欧盟各国和白宫也纷纷出手。 最早“动手”的是意大利&#xff0c;直接在全国上下封…

SwinTransformer学习

参考&#xff1a; Swin-Transformer网络结构详解 https://blog.csdn.net/qq_37541097/article/details/121119988 x.1 前言 x.1.1 特点 它具有两个特点&#xff1a; 采用类似卷积神经网络中的层次构建方法采用W-MSA和SW-MSA全新的位置编码方式 层次构建方法 相比较于ViT&…