Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 单元返回函数的目的是什么_Kotlin - Fatal编程技术网

Kotlin 单元返回函数的目的是什么

Kotlin 单元返回函数的目的是什么,kotlin,Kotlin,从Kotlin文档中: 如果函数不返回任何有用的值,则其返回类型为Unit。Unit是只有一个值的类型-Unit.value。不必显式返回此值: fun printHello(name : String?) : Unit { if (name != null) print("Hello, $name!") else print("Hi there!") // We don't need to write 'return Unit.VALUE' or

从Kotlin文档中:

如果函数不返回任何有用的值,则其返回类型为Unit。Unit是只有一个值的类型-Unit.value。不必显式返回此值:

fun printHello(name : String?) : Unit { 
   if (name != null) 
     print("Hello, $name!") 
   else 
     print("Hi there!") 
   // We don't need to write 'return Unit.VALUE' or 'return', although we could 
}

单元返回函数的目的是什么?为什么有价值?这个值是多少?

目的与C或Java的
void
相同。只有Unit是正确的类型,所以它可以作为泛型参数等进行传递

  • 为什么我们不称之为“Void”:因为“Void”一词意味着“什么都没有”,还有另一种类型,
    nothing
    ,意思是“根本没有值”,即计算没有正常完成(永远循环或抛出异常)。我们承受不起意义上的冲突

  • 为什么单元有一个值(即不等于零):因为通用代码可以顺利工作。如果您为泛型参数T传递Unit,那么为任何T编写的代码都将需要一个对象,并且必须有一个对象,即Unit的唯一值

  • 如何访问Unit的值:因为它是一个单例对象,所以只需说
    Unit


  • 单位存在的主要原因是因为一般原因。 让我们使用Kotlin文档中的示例

    class Box<T>(t: T) {
        var value = t
    }
    
    这就是为什么单元返回一个值,以便Kotlin可以从传递到类初始化中的类型推断出该值。当然,你也可以这样写

    var box = Box<Unit>(Unit)
    

    UNIT
    实际上包含有价值的信息,它基本上就是“完成”的意思。它只是将方法已完成的信息返回给调用方。这是一条真实的信息,因此可以将其视为方法的返回值。

    谢谢!我明白为什么它现在不是空的或者什么都没有。但选择“单位”对我来说有点误导。虽然我不是以英语为母语的人,“Unit”只是代表“只有一个值的东西”,它是一个传统的名称,来自函数式语言。我同意这个名字不是很直观,但我们没能发明一个更好的名字。@AndreyBreslav,在我听来,
    Unit
    这个词不可能存在于它的表面,意思是“什么的单位?”@AndreyBreslav,是的,这引出了:“它代表一个实体,一个计数或测量的单位。”。那么实体是什么?@AlikElzin kilaka实际上,在函数世界中,将一种0元元组称为“单位”是一种传统,因为它只有一个值。我认为这是一个正确的名字,因为根据维基百科的文章,数字“一”也可以被称为“单位”或“统一”。你可以把它看作是一个单位类型,而不是某事物的一个单位,也就是说,一个在类型代数中具有1的代数性质的类型。查找“总和类型”和“产品类型”了解更多详细信息我不是类别理论专家,但我知道名称
    void
    unit
    来自类别理论
    void
    是一个没有成员的类别,
    unit
    是一个有一个成员的类别,
    bool
    是一个有两个成员的类别(true和false)
    void
    继承自C语言,这是通用代码的一大难题。通常在爪哇、C和C++中,需要处理<代码> Value>代码>案例,因为它是一个奇怪的类型(它没有任何值)。code>unit有着微妙的优越性,因为它只有一个值,这意味着在特殊情况下不需要这样做。此外,在FP中,所有函数都有一个参数,因此需要一个不在乎的值。
    Unit
    由于一般原因而存在,代码可以顺利运行。并且它还将信息返回给调用者,即方法已经完成。
    var box = Box<Unit>(Unit)
    
    var box = Box(Nothing) //This will return an Error