充分理解Kotlin,快速上手写业务

论坛 期权论坛     
选择匿名的用户   2021-5-29 21:39   80   0
<div class="article-content">
<p></p>
<figure>
  <figcaption></figcaption>
</figure>
<p></p>
<h1 class="heading">前言</h1>
<p><strong>即使每天10点下班,即使需求很多,我也要用这腐朽的声音喊出:我要学习,我要写文章!!</strong></p>
<p><a href="https://juejin.im/post/5c0e68e7518825653a2341e0">几个特性,快速上手Kotlin</a></p>
<p><a href="https://juejin.im/post/5c06a6dee51d451de36fdbd2">充分理解Kotlin,快速上手写业务</a></p>
<p><a href="https://juejin.im/post/5bee256651882572ac7f14c9">快速切换至Kotlin for Android模式</a></p>
<p><a href="https://juejin.im/post/5c069acb6fb9a049c042cc93">聊一聊Kotlin中的协程,真香</a></p>
<p>又是一篇Kotlin的文章,为啥...还不是因为工作需要。毫无疑问,最好的学习方式是通过官方文档去学习。不过个人觉得官方文档多多少少有一些不够高效。</p>
<blockquote>
  <p><a href="https://link.juejin.im?target&#61;https%3A%2F%2Fwww.kotlincn.net%2Fdocs%2Freference%2F">中文官方文档</a></p>
</blockquote>
<p>因此这篇是从我学习的个人视角以文档的形式去输出Kotlin语言基础的学习。 不扯淡了,开整。</p>
<h1 class="heading">正文</h1>
<h2 class="heading">高阶函数</h2>
<blockquote>
  <p>高阶函数是将函数用作参数或返回值的函数。</p>
</blockquote>
<p>个人为什么把这个语言特性放在第一位,因为我觉得这是我们Java语言中所不支持的。然而这个特性基本贯穿整个Kotlin语言体系。所以个人把它放到了第一位,也希望各位小伙伴能够重视这个小小的特性。先看看一个小小的demo,感受一下这个特别特性:</p>
<pre class="blockcode"><code class="hljs kotlin copyable"><span class="hljs-comment">// 函数定义</span>
<span class="hljs-function"><span class="hljs-keyword">fun</span> <span class="hljs-title">funtion</span><span class="hljs-params">(num: <span class="hljs-type">Int</span>, innerFun: (<span class="hljs-type">Int</span>)</span></span> -&gt; <span class="hljs-built_in">Int</span>): <span class="hljs-built_in">Int</span> {
    <span class="hljs-keyword">return</span> innerFun(num)
}
<span class="copy-code-btn">复制代码</span></code></pre>
<p>简单解释一下上边的代码。我们先看函数定义,这里定义了一个名为funtion并且返回值为Int的函数,此外这个函数接受一个Int参数和一个<strong>函数类型</strong>的参数(这个函数需要传递一个Int参数,并且返回一个Int值)。 接下来我们调用一下:</p>
<pre class="blockcode"><code class="hljs kotlin copyable"><span class="hljs-comment">// 函数调用</span>
<span class="hljs-keyword">val</span> result &#61; funtion(<span class="hljs-number">1</span>) {
it &#43; <span class="hljs-number">666</span>
}
<span class="copy-code-btn">复制代码</span></code></pre>
<blockquote>
  <p>对于Lambda来说,入参如果是一个的话可以用it来表示</p>
</blockquote>
<p>说实话,第一次我看到这种调用的时候,是一脸懵逼的。不知道刚入坑的小伙伴是不是和我一样的感受?因为这种写法包含小tips: 我们的innerFun是可以被简化为一个Lambda,而当Lambda作为函数的最后一个参数时,是可以将其写在函数之外的。也就是Demo中的funtion(1){}。</p>
<blockquote>
  <p>此外我们要注意一点,这里我们的函数实例,并没有return,这是因为。lambda 表达式中的最后一个表达式是返回值 实际上这就是相当于调用了funtion方法的俩个参数,咱们换一种传统的写法,二者是等价的:</p>
</blockquote>
<pre class="blockcode"><code class="hljs kotlin copyable"><span class="hljs-keyword">val</span> inner &#61; <span class="hljs-function"><span class="hljs-title">fun</span><span class="hljs-params">(num: <span class="hljs-type">Int</span>)</span></span>: <span class="hljs-built_in">Int</span> {
<span class="hljs-keyword">return</span> num &#43; <span class="hljs-number">1</span>
}
<span class="hljs-keyword">val</span> result &#61; funtion(<span class="hljs-number">1</span>, inner)
<span class="copy-code-btn">复制代码</span></code></pre>
<p>OK,接下来咱们趁热打铁,再感受感受函数操作的“骚操作”。接下来我们看一看其实情况下的用法:</p>
<pre class="blockcode"><code class="hljs kotlin copyable"><span class="hljs-comment">// 函数定义1</span>
<span class="hljs-function"><span class="hljs-keyword">fun</span> <span class="hljs-title">funtion</span><span class="hljs-params">(num: <span class="hljs-type">Int</span>, innerFun: (<span class="hljs-type">Int</span>, <span class="hljs-built_in">Int</span>)</span></span> -&gt; <span class="hljs-built_in">Int</span>): <span class="hljs-built_in">Int</span> {
    <span class="hljs-keyword">return</span> innerFun(num, num &#43; <span class="hljs-number">1</span>)
}
<span class="hljs-comment">// 函数调用1(上文提到,入参为1个可以用it表示,那么俩个或者多个呢?我们可以如下,自定义)</spa
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP