龙空技术网

最被低估的 Kotlin 函数

庄志炎 88

前言:

此时各位老铁们对“js return一个函数”大体比较关心,你们都需要剖析一些“js return一个函数”的相关资讯。那么小编也在网上网罗了一些关于“js return一个函数””的相关资讯,希望朋友们能喜欢,兄弟们一起来学习一下吧!

Kotlin 中的运算符函数简介。

与 Java 相比,Kotlin 中有很多——我说很多——类型的函数。我们有扩展函数、中缀函数、内联函数、高阶函数、tailrec 函数,最后是运算符函数。许多开发人员使用扩展函数和高阶函数,但很少有人了解运算符函数的用法

了解操作员功能

什么是运算符?它是一个关键字,用于执行某种运算,例如算术、逻辑和关系。

什么是函数?它是一个可以随时调用的可执行代码块。

那么什么是算子函数呢?它是由某些运算符关键字调用的可执行代码块。它们必须在类或顶级扩展函数中。

运算符函数的基本示例

运算符函数必须有一个接收器类。换句话说,它们必须在类或顶级扩展函数内部。让我们基本看一下下面的代码:

fun main() {  val sampleString = "Repeat this! "    // invoking String.times method here  val repeatedString = sampleString * 5    println(repeatedString)  /* Outputs:   * Repeat this! Repeat this! Repeat this! Repeat this! Repeat this!    */}operator fun String.times(n: Int): String {  val sb = StringBuilder()  repeat(n) {    /* this refers to the receiver String */    sb.append(this)  }  return sb.toString()}

第 10 行是魔法发生的地方。 times 是一个特定的运算符函数,它使用星号 (*) 进行调用。 接收器类是一个字符串,它只允许一个参数 n:Int,对我们来说,它是重复的次数。

默认情况下,您不能使用代码 sampleString * 5 并期望它工作。 您需要为此定义一个运算符函数。

算子函数的实际威力

让我们首先创建一个 Matrix 类并定义一些将初始化矩阵的函数和属性。

import kotlin.math.*/** * A Matrix is a collection of numbers represented in a specific way * used for various calculations in real-world applications. * "precision" is used for the number of decimal places to be shown. */@Suppress("LocalVariableName", "FunctionName")class Matrix internal constructor(precision: Int) {  /**   * The Matrix itself is a 2 dimensional double array   */  internal val rows = arrayListOf<DoubleArray>()    /**   * the number of rows of the matrix.   */  internal val m: Int    get() = rows.size    /**   * the number of columns of the matrix.   * to be decided later   */  internal var n = -1    /**   * accepts the variable number of double values to add    * as a row to the matrix   */  fun row(vararg elements: Double): DoubleArray {    // adds the elements to rows property  }  }

我已经记录了这些功能,因此更容易理解。 rows 是类的实际矩阵; 它是一个二维双精度数组。

get(Int) 运算符函数

我想使用 Matrix 类,如具有超能力的 2D 数组! 例如,如果我想访问 Matrix 类的第一行,通常我必须获取该属性。 但这不再需要了。

import kotlin.math.*/** * A Matrix is a collection of numbers represented in a specific way * used for various calculations in real-world applications. * "precision" is used for the number of decimal places to be shown. */@Suppress("LocalVariableName", "FunctionName")class Matrix internal constructor(precision: Int) {  // [...]    /**   * Fetches the row at index n of the matrix   *    * @param n - index number   * @return the double array - row at index n   */  operator fun get(n: Int) = rows[n]}
val matrix = matrix {  row(3, 5) // Kotlin-DSL function to add a row  row(-2, 1)}/* usually */println(matrix.rows[0][2])/* using get operator function */println(matrix[0][2])

立即,我们需要我们的代码变得更具可读性。 矩阵后的第一个 [] 调用 get(n) 函数,其中 n 为 0。

加号(矩阵)运算符函数

有些函数和构造函数我没有展示其实现,但这确实影响了理解。

import kotlin.math.*/** * A Matrix is a collection of numbers represented in a specific way * used for various calculations in real-world applications. * "precision" is used for the number of decimal places to be shown. */@Suppress("LocalVariableName", "FunctionName")class Matrix internal constructor(precision: Int) {  // [...]    /**   * Adds two matrices   *    * @param other - the second matrix in the operation.   * @return the resultant matrix   */  operator fun plus(other: Matrix): Matrix {    assertEqualOrder(other) // makes sure both matrices have same order        // private secondary constructor not shown    val S = Matrix(m, n, max(_precision, other._precision))    forEachElement {      S[i][j] = this[i][j] + other[i][j]    }    return S  }}

在 plus() 函数中,我们接受一个参数,即 Matrix 本身。 我们调用 plus() 运算符并返回第三个矩阵。

val A = matrix {  row(8, -5)  row(3, -1)}// invoking the plus() function with the operatorval C = A + matrix {  row(4, 5)  row(0.3, -3.0)}

我希望你喜欢阅读我的文章。 谢谢!

标签: #js return一个函数