Kotlin学习历程——函数与Lambda表达式(二)

【Kotlin】探索回调机制:函数类型、高阶函数和接口 在本文中,我们将深入探讨 Kotlin 中的三种回调机制:`函数类型`、`高阶函数`和`接口`。我们将分析它们的优缺点,并讨论在哪些情况下应该选择哪种机制。无论你是初学者还是有经验的 Kotlin 开发者,本文都将为你提供有关如何在应用程序中实现回调的清晰指导。 阅读详情

Kotlin语言中文站

高阶函数

以另一个函数作为参数或者返回值的函数叫高阶函数, 这个参数函数我们可以用lambda或者或者函数的引用来表示。 例如集合的filter就是一个高阶函数

fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> {
    //todo
}

如上:(T) -> Boolean)是函数类型,因此filter是接受一个函数作为它的参数,所以符合高阶函数的要求。

我们自己编写一个高阶函数看看:

/**
 * 简单Get请求,callback返回String数据
 */
fun requestGet(url: String, callback: (String) -> Unit) {
    //request
    /* ... */
    //返回数据
    callback("返回请求的结果")
}


//调用
fun main(args: Array<String>) {
    //Lambda表达式的写法:如果函数作为最后一个参数,Lambda表达式可写到圆括号的外面
    requestGet("http://www.hepingdev.com/getConfig") { result ->
        println(result) //打印:返回请求的结果
    }
}

如上:requestGet函数有两个形参,一个String类型, 一个函数类型(String) -> Unit, 请求的String结果通过这个函数回调返回。其实就是java当中的接口回调,写法不同。


如何声明函数类型呢?下面一起看看。

函数类型

声明函数类型,需要将函数参数类型放在圆括号当中,紧接着是一个箭头和函数的返回类型:
(Int, String) -> Unit, (Int, String)是参数类型,Unit是返回类型,这里代表不返回任何值,类似Java中的void。

上一节我们学习过,Unit类型的返回值可以省略不写,但是声明函数类型是需要显式写明返回类型的,所以Unit不能省略。

像其他函数一样,函数类型的返回值也可以标记为可空类型:

var returnNullFunc: (Int, Int) -> Int? = {x,y -> null}

也可以定义一个变量类型为函数类型的可空变量:

var paramOrNull: ((Int, Int) -> Int)? = null

上面的代码看着可能有点难以理解,我们把函数类型换成字符串类型:

var paramOrNull: String? = null

如上我们定义了个可空的字符串变量,这样比对下就容易理解了,一个变量类型为函数类型(Int, Int) -> Int,一个变量类型为字符串类型String。


如上我们一起学习了如何声明一个接收另外的函数作为参数的高阶函数,那返回其他函数的高阶函数呢?

返回函数的函数

从函数中返回另外一个函数的场景整体来说用得比较少,举个简答得例子:

/**
 * 返回函数的函数
 */
fun returnFunc(): (String) -> Unit {
    return { info -> println("print##$info") }
}


//调用
fun main(args: Array<String>) {
    val getFunc = returnFunc()
    getFunc("传递打印的值")  //打印: print##传递打印的值
}

上面的代码主要是学习下写法,实际是没有意义的。 后面想到好的例子再补充。


Lambda表达式

Lambda表达式的完整语法如下:

val sum: (Int, Int) -> Int = { x: Int, y: Int -> x + y }

Kotlin的Lambda表达式始终用花括号包围,注意参数并没有用括号括起来,箭头把参数和Lambda的函数体隔开。

这里记录学习下lambda表达式的几种写法。


传递末尾的lambda表达式

如果函数的最后一个参数是函数类型,那么相应函数参数传入的lambda表达式可以直接放在圆括号之外,这种语法也被称为拖尾lambda表达式:

/**
 * 简单Get请求,callback返回String数据, callback函数是最后一个参数
 */
fun requestGet(url: String, callback: (String) -> Unit) {
    //request
    /* ... */
    //返回数据
    callback("返回请求的结果")
}


//调用时lambda表达式可以直接放到圆括号之外
requestGet("http://www.hepingdev.com/getConfig") { result ->
    println(result)     //打印: 返回请求的结果
}


//当然也可以不使用拖尾写法,使用普通的写法
requestGet("", { result -> println(result) })

如果lambda表达式不是最后一个参数,那么就不能使用拖尾lambda表达式的写法了。


it:单个参数的隐式名称

如果一个lambda表达式只有一个参数时,可以不用显示写明唯一的参数以及箭头->。该参数会隐式声明为it。我们还是拿上面的例子举例:

/**
 * 简单Get请求,callback返回String数据
 */
fun requestGet(url: String, callback: (String) -> Unit) {
    //request
    /* ... */
    //返回数据
    callback("返回请求的结果")
}


//调用
requestGet("http://www.hepingdev.com/getConfig") { 
    println(it)   //打印: 返回请求的结果
}

当然编辑器也会给予相应的提示:

如果lambda表达式具有一个以上的参数呢? 那不好意思,只能显式声明参数,不能忽略:

requestGet("http://www.hepingdev.com/getConfig") {result, count ->
    println("request result: $result, array count:$count")
}

下划线用于未使用的变量

如果不使用lambda表达式中的参数,可以采用下划线_代替。

requestGet("http://www.hepingdev.com/getConfig") { _, _ ->
   println("不使用回调的参数变量")
}

上一篇:Kotlin学习历程——函数与Lambda表达式(一)

十、Kotlin 异步程序设计详解 Kotlin 的协程提供了一种更简洁、更易读的异步编程方式,相比回调、Future 和 RxJava 有显著优势。通过挂起函数、结构化并发和丰富的操作符,可以编写出高效且易于维护的异步代码。对于 Android 开发,协程与 Jetpack 组件(如 ViewModel 和 LiveData)的集成使得异步编程变得更加简单和安全。 阅读详情

相关推荐

kotlin lambda之 “带接受者的lambda”

lambda基础 lambda这一块是kotlin一大难点,作为初学者,本篇文章记录一下学习历程。主要讨论了labmda的基本语法,以及带有接受者的lambda这种特殊语法的含义。 基本语法 Lambda 表达式的完整语法形式如下: val sum: (Int, Int) -> Int = { x: Int, y: Int -> x + y } lambda 表达式总是括在花括号中, 完整语法形式的参数声明放在花括号内,并有可选的类型标注, 函数体跟在一个 -> 符号之后。如果推断出的该

ljjliujunjie123的博客 1121

回调的介绍以及使用(以kotlin为例)

回调的介绍以及使用(以kotlin为例)什么是回调?案例回调的基本构成 什么是回调? 先来看一下维基百科的解释: 在计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过参数将函数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。 嗯。每个人我都认识,为什么连在一起就不认识了呢… 算了算了,先不管这个定义了,直接从案例出发吧,这样更容易理解一些。 案例 假设现在有这样一个场景,我需要给用户

Hydralisk2333的博客 1984

kotlin 协程之Callback转挂起函数

在 Kotlin 协程中可以通过挂起函数来实现异步操作的串行化,但是在日常开发场景中,大部分项目都是java和kotlin并存的,老旧的Java代码除非有需求,否则不会轻易改动重构。即使项目是纯kotlin开发的,也会有一些java代码实现的三方库,因此,我们很难规避掉所有的 Callback,而且Callback是一种非常常见的设计模式,我们经常会在项目中看到。当然,在协程中,我们也可以使用Callback。

喻志强的博客 1539

java调用kotlin callback 和 kotlin调用kotlin callback,java callback

/** * kotlin文件中 Java类使用Java的callback */ //第一种写法 JavaManager().setJavaCallback(JavaCallback { println(it) }) //第一种方法取别名 JavaManager().setJavaCallback(JavaCallback { aaa -> println(aaa) }) //第二种写法 .

Goals1989的博客 3569

【Telephony】APN配置及加载流程&项目实践(AOSP)

学习APN关键是学会明白apns-conf.xml文件各个参数的意思,然后熟悉TelephonyProvider是如何读取文件创建数据库的,譬如数据库表的约束、文件的读写顺序等,还有读取后的ApnSetting的二次定制以及显示(例如屏蔽xcap等)。虽然一般在项目中APN的需求很简单,就是按照客户提供的APN参数添加上配置,或者在显示屏蔽一些参数,但是项目维护的过程中APN的问题也是比较多的。

weixin_44513784的博客 5509

微信小程序scroll-view,点击menu,滚动到锚点;滚动到锚点,激活menu。

首先看看效果图1、首先是点击菜单,滚动列表,这个实现比较简单。直接使用scroll-view 的 scroll-into-view属性,小程序文档。&lt;view class='container'&gt; &lt;!-- 菜单 --&gt; &lt;view class='menu'&gt; &lt;ul&gt; &lt;!-- scrollList 修改cate --&g...

weixin_39834214的博客 1万+

Kotlin学习基础知识大全(上)

Kotlin是由JetBrains公司开发的一种静态类型编程语言,最初发布于2011年。JetBrains是知名IDE工具IntelliJ IDEA的开发商,他们开发Kotlin的目的是为了解决Java语言在开发效率、代码简洁性和安全性方面的一些不足。2016年2月,Kotlin 1.0正式发布,标志着语言进入稳定阶段。2017年5月,在Google I/O大会上,Google宣布Kotlin成为Android开发的官方支持语言,这一决定极大地推动了Kotlin的普及。Kotlin中使用fun。

百锦再的博客 1万+

基于Simulink的异步电机定子磁链定向控制(SFOC)仿真

本文带你从零构建了异步电机SFOC系统​ 的完整Simulink仿真模型,实现了:✅ 搭建异步电机、逆变器、风机负载的主电路与传感器模型;✅ 用MATLAB Function实现定子磁链观测(电压模型)、坐标变换、双闭环PI控制;✅ 验证SFOC在转速跟踪(响应0.2s、超调4%)、转矩响应(恢复0.15s)中的高性能;✅ 对比RFOC,明确SFOC在参数鲁棒性(转子电阻+50%时波动<2%)上的独特优势;✅ 理解SFOC“定子磁链定向+解耦控制”的核心思想(低成本高鲁棒性驱动的工程实现)。

xiaoheshang_123的博客 389

Kotlin学习历程——函数与Lambda表达式(一)

Kotlin语言中文站 函数 基础写法 在Kotlin中使用关键字fun声明一个函数: fun printInfo() { println("This is a function.") } 如果携带参数呢?如下main函数所示: fun main(args: Array<String>) { println("length:${args.size}") } 如果一个函数没有返回值,如上两个函数,那么它的返回值类型默认是Unit,可省略不写: 我们看看Unit的源码: p.

hepingdev的专栏 435

第3版•系统集成项目管理工程师(中级) │ 第6章 数据工程

🥏第3版•系统集成项目管理工程师(中级) │ 第6章 数据工程

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1万+

Windows 11 安装、使用 Git:下载、安装、概念、命令、分支模型

本文详细介绍了在 Windows 11 系统上安装与使用 Git 的完整流程,涵盖从官方或国内镜像下载安装包、关键安装选项配置,到 Git 核心概念(如工作区、暂存区、分支、远程仓库等)的通俗解释。同时梳理了常用命令与五种主流 Git 分支模型(如 Git Flow、GitHub Flow 等),帮助开发者根据项目规模选择合适的工作流,是面向初学者与进阶用户的实用指南。

寒水馨 · 轻量级技术文档 · hanshuixin.org 2389

Kotlin之心路历程

Kotlin之心路历程 以小白眼光看kotlin kotlin这个小丫鬟被谷歌扶正为大房两年,期间看过不少博文,很多人也已经把个人项目迁移到kotlin了,当然国外的开发者更给力,直接大部企业开发已经kotlin,也订阅了涛哥的极客时间(一直没时间看,果然看视频太费事,还是文章可以抽得时间挤一挤学),一直是不想学习啊,一个人的惰性就是这样,java又不是不能用,代码通俗易懂。说句心里话,jav...

ApkCore的专栏 497

手机相机Tuning专项调优(一):基础流程与图像主观评价标准建立实战解析

本篇为手机相机系统“Tuning专项调优”系列的开篇,深入剖析了当前手机相机Tuning的基本流程与图像主观评价标准的构建方法。结合实际工程经验与最新业界案例,详细介绍ISP调优和3A控制中涉及的主观评价标准,如锐度、色彩饱和度、噪声感知等,并提出一套可工程化落地的标准制定与评测实践体系,帮助工程师有效提升图像品质。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1933

Kotlin零基础入门到精通(精选)

Kotlin从入门到精通一. Kotlin课程概述1.1 课程安排:1.2 什么是Kotlin?1.3 Kotlin的发展历程1.4 学习目标1.5 必备知识1.6 参考资料1.7 Hello,world二. 数据类型2.1 本章目标2.2 Boolean类型2.3 Number类型2.4 Char类型2.5 类与对象2.6 空类型和智能类型转换2.7 包2.8 区间2.9 数组三. 程序结构3.1 常量与变量3.2 函数3.3 Lambda表达式 一. Kotlin课程概述 1.1 课程安排: 课程介绍

暗余的博客 2万+

Android AVB 分析(十二)嵌入式设备安全中的 dm-verity 简介

上一篇 《Android AVB 分析(十一)bootloader 是如何进行 verify boot 检查的?》 分析了 bootloader 中是如何调用 libavb 函数库验证 vbmeta 和 boot 等分区的。接下来就打算写一篇介绍 dm-verity 原理的文章,然后再写一篇徒手 dm-verity 实践的文章,结果偶然发现了本篇的英文原版。写得太好,我觉得自己完全没有必要再写原理了。由于原文是英文,有些英语不太好的朋友不一定能完全理解。我花了点时间,结合 AI 将英语原文翻译成中文。

洛奇看世界 3598

成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred

成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred. 目录 解决问题 解决思路 解决方法 解决问题 安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred. 解决思路 发生未知错误。 解决方法 很可能是因为当前电脑下载的cuda版本不适合当前电脑GPU支持的cuda版本! 推荐文章:CV:Win1..

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 7524

lambda表达式杂谈

var personInfo = [ { name: "张三", age: 20, gender: "male" }, { name: "李四", age: 18, gender: "male" }, { name: "王五", age: 19, gender: "male" }, { name: "春香", age: 17, g...

diebianyi1454的博客 185

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Kotlin学习(1):Kotlin简介

Kotlin简介、特点以及优势

Caesar的博客 510

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Kotlin学习笔记

Kotlin从小白到入坑的历程从今天记录自己的学习历程:kotlin从今天记录自己的学习历程:kotlin 从今天记录自己的学习历程:kotlin 今天日期是2019.4.21日 这是我自从学习编程以来第一次写博客,虽然是属于个人闲来无趣的笔记,只是为了加深我对编程的认识.和对编程的理解 今天我从kotlin学习了数组,如果我对这些有误解还望大神指出来,以便我加以改进 数组的三个基本特性: 一...

小亮的博客 362

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Kotlin 语言 知识点整理1【个人用】

Kotlin作为JetBrains开发的现代化语言,以其简洁、安全和高效特性成为Java的理想替代。它与Java完全互操作,共享JVM平台和生态系统,但通过空安全机制、扩展函数、数据类等特性大幅减少样板代码。核心优势包括:1)强制空安全设计杜绝NPE;2)支持函数式编程和Lambda表达式;3)协程简化异步编程;4)扩展函数增强代码组织。Java开发者应重点掌握空安全处理、集合操作、作用域函数及协程应用,通过IDE转换工具和Kotlin标准库快速上手。渐进式迁移策略和"以Kotlin方式思考&qu

indeedes的博客 261

Kotlin 初始之路1.0

一. 初识kotlin :基于java虚拟机的一门高级语言 Andrey和他的小伙伴写得一门语言 比Scala简单 ,依赖java的生态,具有java的静态语言特征,同时在语法上比java灵活很多,例如:在kotin中不需要写分号,支持方法的扩展,还支持Lambda表达式,支持函数式编程等 语法上还支持变量判空,比java友好很多 java中经常出现d的java.lang.NullPoin...

大白的博客 189

Android第二课-----Kotlin入门

2011年,JetBrains发布了Kotlin的第一个版本,并在2012年将其开源。2016年Kotlin发布了1.0正式版,代表着Kotlin语言已经足够成熟和稳定了,并且JetBrains也在自家的旗舰IDE开发工具IntelliJ IDEA中加入了Kotlin的支持。2017年Google宣布Kotlin正式成为Android开发一级语言,并且Android Studio也加入了对Kotlin的支持。2019年Google正式宣布了Kotlin First,未来提供的官方API也将会以Kotlin版

贝勒里恩的博客 2847

kotlin学习和常用知识

Kotlin 是一种由 JetBrains 公司开发的静态类型编程语言,旨在为 Java 开发者提供一种更加安全、简洁、易于使用的编程语言。Kotlin 可以编译成 Java 字节码,因此可以在 Java 虚拟机(JVM)上运行。下面是关于 Kotlin 的详细解释、发展历史、语法学习和代码解读。

AI时代光年 1506
上一篇: Kotlin学习历程——函数与Lambda表达式(一)
下一篇: 【Chrome浏览器】点击内容链接总是在当前标签页打开,如何设置用新标签页打开链接?
hepingdev
博客等级 码龄5年 3581粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hepingdev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值