首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么你可以调用一些没有括号的方法,而对于另一些方法,你必须使用括号(Kotlin)?

在Kotlin中,方法调用的语法规则是根据方法的定义来确定的。有些方法可以在调用时省略括号,而另一些方法则必须使用括号。

  1. 没有括号的方法调用:
    • 对于没有参数的方法,可以在调用时省略括号。例如:println("Hello")可以简化为println "Hello"
    • 对于只有一个参数的方法,也可以省略括号。例如:listOf(1, 2, 3)可以简化为listOf 1, 2, 3
  • 必须使用括号的方法调用:
    • 对于有多个参数的方法,必须使用括号来传递参数。例如:max(10, 20)不能简化为max 10, 20
    • 对于需要传递Lambda表达式的方法,也必须使用括号。例如:list.filter { it > 0 }不能简化为list.filter { it > 0 }

这种语法设计的目的是为了提高代码的可读性和清晰度。省略括号的方法调用更加简洁,适用于没有参数或只有一个参数的情况。而使用括号的方法调用则更加明确,可以清晰地传递多个参数或Lambda表达式。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数(云原生无服务器函数计算服务):https://cloud.tencent.com/product/scf
  • 腾讯云云数据库 MySQL 版(高性能、可扩展的关系型数据库):https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云云服务器(弹性计算云服务器):https://cloud.tencent.com/product/cvm
  • 腾讯云人工智能(AI开放平台):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(连接万物,开启智能新时代):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动应用开发平台):https://cloud.tencent.com/product/mad
  • 腾讯云对象存储(海量、安全、低成本的云端存储服务):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(高效、安全、易用的区块链服务):https://cloud.tencent.com/product/baas
  • 腾讯云游戏多媒体处理(游戏多媒体处理服务):https://cloud.tencent.com/product/gmp
  • 腾讯云音视频(音视频通信云服务):https://cloud.tencent.com/product/trtc
  • 腾讯云网络安全(全方位网络安全解决方案):https://cloud.tencent.com/product/ddos
  • 腾讯云CDN(内容分发网络):https://cloud.tencent.com/product/cdn
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【码上开学】Kotlin 高阶函数、匿名函数和 Lambda 表达式

在 Java 里,如果有一个 a 方法需要调用另一个 b 方法在里面调用可以; int a() { return b(1); } a(); 如果你想在 a 调用时动态设置 b 方法参数...——这句话有点绕啊——如果调用它,可以——当然必须——传入一个函数类型对象给它; fun b(param: Int): String { return param.toString()...对象是不能加个括号调用,对吧?但是函数类型对象可以为什么?...不过当和 Java 交互时候,Kotlin 是支持这种用法:当你函数参数是 Java 单抽象方法接口时候,依然可以使用 Lambda 来写参数。...但这其实也不是 Kotlin 增加了功能,而是对于来自 Java 单抽象方法接口,Kotlin 会为它们额外创建一个把参数替换为函数类型桥接方法,让可以间接地创建 Java 匿名类对象。

2.1K20

那个男人再发力,原来我以前学 Lambda 都是假

在 Java 里,如果有一个 a 方法需要调用另一个 b 方法在里面调用可以; int a() { return b(1); } a(); 如果你想在 a 调用时动态设置 b 方法参数...——这句话有点绕啊——如果调用它,可以——当然必须——传入一个函数类型对象给它; fun b(param: Int): String { return param.toString()...对象是不能加个括号调用,对吧?但是函数类型对象可以为什么?...不过当和 Java 交互时候,Kotlin 是支持这种用法:当你函数参数是 Java 单抽象方法接口时候,依然可以使用 Lambda 来写参数。...但这其实也不是 Kotlin 增加了功能,而是对于来自 Java 单抽象方法接口,Kotlin 会为它们额外创建一个把参数替换为函数类型桥接方法,让可以间接地创建 Java 匿名类对象。

64020

Kotlin 漫谈系列之类与继承

赶紧进入正题吧,说说你们类是怎么定义Kotlin: ?我们定义类和 Java 差不多,也是用 class 声明一个类,不过 Kotlin 里面如果类实体没有什么内容的话,可以不要大括号。...在 JVM 平台,如果使用 @JvmStatic 注解,可以将伴生对象成员生成为真正静态方法和字段。 不过你们方法可以被子类重写,这个在 Java 里也不行。...如果想要让某个类可以被继承,必须要现式为该类添加 open 关键字,该关键字提供了和 Java 中 final 相反功能。 Swift: ?,为什么要区分?...在 JVM 平台,如果使用 @JvmStatic 注解,可以将伴生对象成员生成为真正 静态方法和字段。更详细信息请参见Java 互操作性一节。...对于 Optional 类型成员变量,如果没有显式地初始化,编译器会自动把它初始化为 nil。对于非 Optional 类型成员变量,必须显式地初始化。

3.6K40

Kotlin函数

这里等待后面具体来看什么时候非内联 如果只想被(作为参数)传给一个内联函数 lamda 表达式中只有一些被内联,可以用 noinline 修饰符标记一些函数参数: inline fun foo...需要注意是,如果一个内联函数没有可内联函数参数并且没有具体化类型参数,编译器会产生一个警告,因为内联这样函数很可能并无益处(如果确认需要内联,则可以关掉该警告)。...在 Kotlin 中有一个约定,如果函数最后一个参数是一个函数,并且传递一个 lambda 表达式作为相应参数,可以在圆括号之外指定它: lock (lock) { sharedResource.operation...: ints.filter(fun(item) = item > 0) 匿名函数返回类型推断机制与正常函数一样: 对于具有表达式函数体匿名函数将自动推断返回类型,具有代码块函数体返回类型必须显式指定...可以实现dsl风格代码全靠它 Kotlin 提供了使用指定 接收者对象 调用函数字面值功能。 可以调用该接收者对象上方法而无需任何额外限定符,可以任意调用接受者方法和属性。

2.3K40

Kotlin面向对象编程,深入讨论继承写法问题

He is " + age + " years old.") } } 简单解释一下,这里使用var关键字创建了name和age这两个字段,这是因为我们需要在创建对象之后再指定具体姓名和年龄,如果使用...对于初学Kotlin来人讲,这对括号确实挺难理解,也可能是Kotlin在这方面设计得太复杂了,因为它还牵扯到主构造函数、次构造函数等方面的知识,这里我尽量尝试用最简单易懂讲述来让大家理解这对括号意义和作用...到这里为止都还挺好理解吧,但是这和那对括号又有什么关系呢?这就牵扯到了Java继承特性中一个规定,子类中构造函数必须调用父类中构造函数,这个规定在Kotlin中也要遵守。...那么再来回头看一下Student类,现在我们声明了一个主构造函数,根据继承特性规定,子类构造函数必须调用父类构造函数,可是主构造函数并没有函数体,我们怎样去调用父类构造函数呢?...Kotlin当然没有采用这种设计,而是用了另外一种简单但是可能不太好理解设计方式:括号。子类主构造函数调用父类中哪个构造函数,通过在父类后面加上括号来指定。

82430

Kotlin安卓开发学习(2)

时,我们不需要像Java那样定义 get/set 方法,在调用对象属性时也不需要调用get/set方法使用属性。...= 0 } 与Java中不同,Kotlin中继承需要在继承类后面加上一对括号为什么需要加上括号,这就涉及了Kotlin主构造函数和次构造函数概念。...当然,主构造函数没有函数体,如果我们需要在主构造函数里编写一些逻辑,可以使用init结构体,所有主构造函数中逻辑都可以写在里面: class Student(val sno: String, val...根据继承特性规定,子类构造函数必须调用父类构造函数,可是主构造函数并没有函数体。Kotlin当然没有采用这种设计,而是用了另外一种简单但是可能不太好理解设计方式:括号。...且因为接口没有构造函数,所以不需要写上括号。 因为接口中定义了待实现函数,所以我们使用接口后必须对函数进行实现。Kotlin中,我们使用override关键词来重写或者实现接口中函数。

36120

Kotlin Android】一个列表带你领略Kotlin简洁之风

对于Kotlin一开始也是没有多大兴趣,对函数式编程也是有一定排斥,总感觉代码可读性和可维护性似乎大大下降,事实上只是对这中编程思想没有一个很好转变而已。...他们之间不能直接相互强制转化,必须调用以下方法进行转换,每个基础类型都带有以下方法: toByte(): Byte toShort(): Short toInt(): Int toLong(): Long...第三种方式,如果不想声明变量同时初始化变量,那么可以使用“?”...,并且构造函数需要一个Int类型参数 2,基类Base中有一个init初始化代码块,可以在里面直接使用构造函数中参数来完成数据初始化 3,子类必须在默认构造方法中初始化基类参数 4,构造函数名字为...Kotlin基本使用 新建支持KotlinAndroid工程 如果Android Studio还不是3.0,那么需要下载Kotlin插件和做一些相关配置,请自行百度。

1.8K10

35分钟教你学dart(第二节)

会看到 Dart推断出它myAge是一个,int因为它是用整数值35初始化。 如果您没有明确指定数据类型,Dart 会使用类型推断来尝试确定它,就像 Swift 和 Kotlin 所做那样。...这就是为什么最后一条语句得到42.0不是 42原因print。 注意:DartPad 在控制台中将“84 / 2”结果显示为 42,因为它将输出到控制台格式设置为仅显示有效数字。...如果您需要在字符串中显示转义序列,您可以使用以 为前缀原始字符串r。 var rawString = r"如果不能简单地解释它\n没有很好地理解它。"...Dart 空字符串输出 空感知运算符 Dart 有一些可识别空值运算符,您可以在处理空值时使用。 双问号运算符 ,??就像KotlinElvis 运算符:如果对象不为空,它返回左侧操作数。...空括号表示该函数没有参数。与常规函数一样,大括号代码是函数体。

13K30

如何让注解处理器支持 Kotlin

= null; 一旦能够识别出来注解标注类是 Kotlin,那么我们就可以采用一些 Kotlin Style 方式生成代码,例如本来如果是 Java 源码,我会生成这样一个方法: public class...,我完全可以生成一个扩展方法Kotlin 开发者更愉快地调用: fun Hello.toHelloString(){ ... } 当然,这个扩展方法也是可以被 Java 开发者很愉快地调用...不能怎么办,连 J 神 Kotlin Poet 都没有做这件事儿,如果我们需要写注解处理器生成 Kotlin 代码,这一点需要自己来处理。...不过呢,这个项目目前还只是发到了 0.6,所以难免有个小 bug 啥,例如我要生成一个匿名内部类,就算我只实现了一个接口,它也会给我添加一个构造方法调用括号: object: SomeInterface...小结 简单来说,为 Kotlin 提供 apt 服务,无论从编译器(kapt)还是从注解处理器开发者来讲,必须都得装作和用都是 Java 才行。 ?

2.3K41

Kotlin 揭秘:理解并速记 Lambda 语法

最后,它返回它找到最大元素。相当简单。 然而 selector,看起来很整洁,它必须是允许我们在上面使用 it.pageCount 东西,所以让我们再看看它。...即使只是在这一行中,甚至还有相当多语法糖。在这种情况下,对于 selector: (T) -> R 来说是一个带有单个参数 T 函数,并返回一些类型 R 相关返回值。...可行方法Kotlin 包含一组名为 FunctionN 接口,其中 N 是它接受参数数量。...我每次使用它时都会执行分配吗? 这是一个很好问题!好消息是,不,不是。如果再看一遍,会看到它 maxBy 被标记为一个 inline 函数。...最后,我们知道,当只有一个 lambda 参数调用函数时,可以完全省略通常使用括号。 查看 Google Developers 博客,了解更多精彩内容,敬请期待更多关于 Kotlin 文章!

63800

从点滴基础探究Kotlin独特魅力

,即使没有显式地写出来.这种分析通常被称为类型推导. ② 只有表达式体函数返回类型可以省略,代码块体函数返回类型和return语句必须显示写出来....I/System.out: GREEN 说明: ① 如果每次调用函数时候,就创建一些Set实例,那创建频繁就会出问题. ② 如果when表达式没有参数,分支条件就是任意布尔表达式.这样可读性差一些,...重构: 用"when" 代替 "if" kotlin没有三元运算符,因为if表达式有返回值.当我们使用if时候,可以使用表达式语法: 去掉return语句和花括号,使用if表达式作为函数体. 1.使用有返回值...是键, binary 是值. ③ 可以根据键来访问和更新map : 使用map[key] 读取值 , 并使用 map[key] = value 设置值,不需要调用 get 和 put ...."之间字符串,但是仍然可以使用in 运算符检查一个其他对象是否属于这个区间. 10 kotlin异常 与java类似,方法调用者能捕获到这个异常并处理它;如果没有被处理,异常会沿着调用栈再次抛出

2.6K30

kotlin实战教程之lambda编程

本文是对<<kotlin实战 中 “lambda编程”一章总结,主要记录了一些我认为比较重要点 在kotlin中常见lambda用法主要由以下几种: 与集合一起使用 lambda可以与任意java...表达式始终用花括号包围,实参并没有括号括起来。...常用库函数 对于集合,kotlin提供了丰富库函数便于我们使用对于这些函数这里我们只介绍一些关键点。...我们可以使用扩展函数asSequence把任意集合转换成序列,调用toList来做反向转换 我们来对比一下上面两种方法: ?...注意如果lambda参数在某个地方被保存起来,以便后面可以继续使用,这种lambda表达式将不会被内联,因为必须要有一个包含这些代码对象存在 内联集合操作 kotlin标准库中map、filter

71630

Kotlin 成员扩展函数和 implicit receiver

另外,对于它们同名成员变量或者方法,如果我也省略掉 this: 拿到就是内部类成员。如果想拿外部类,就必须把 this 写完整: 到现在为止,做 Java 基本是都懂。我们继续。...——那我到底对谁调用? Java 没有扩展函数概念,所以不存在这种写法,但 Kotlin可以。...换句话说,我在调用这个外部函数时候,它函数类型参数括号里就有一个 IntMultiplier 类型 this 了: 那么,我在里面就可以这么写了: 哎,就这么通过给参数设置 receiver...不过咱这个例子里,外部函数正好也是在 IntMultiplier 类里声明,所以直接写就行: 但这种结构并不是必须可以用你能想到其他方式去写这种安插。...不管是使用 Kotlin 现成函数还是我们自己来实现,Kotlin 允许我们通过这种「指定」方式来手动安插新 this 到代码里,不用非得用内部类才能实现。

12210

Kotlin语法基础之运算符

可以使用标准库中定义 downTo 方法: for (i in 4 downTo 1) print(i) // 输出“4321” 能否以不等于 1 任意步长迭代数字?...这里,Kotlin给我们提供操作符为两个引号 “!!”,如: var a : String? = null // 必须是可空类型,不然强校验没有意义 val lenC = a!!....Int 可空类型集合 如果有一个可空类型元素集合,并且想要过滤非空元素,可以使用 filterNotNull 方法来实现。 val nullableList: List<Int?...在实现过程中,首先把指定运算表达式转化为对运算方法调用,运算对象转化为运算符方法实参,然后根据实参类型来确定需要调用达标函数,之后Kotlin会将对应符号运算切换到方法之中。...比较操作符 表达式 转换方法 a > b a.compareTo(b) > 0 a 位运算 对于位运算,Kotlin没有提供特殊操作符, 只是提供了可以叫中缀形式方法, 比如: // 给 Int

2.8K50

Kotlin初探

我们也可以这样写var str= ""省略了生命变量类型,它可以根据赋自动推断出类型。...6 函数 我们先来实现一个简单数值求和函数,通用实现方法如下: 传入两个Int型数值,sum是函数名,括号后面的:Int表示该函数返回Int值,函数体中对两个数字相加并返回。...如果我们方法体仅仅是打印字符串,并不返回值则: Unit就类似我们java中void,即没有返回值,此时我们可以省略 对于函数体,方法或者类等和java一样也有一些修饰符,如下 abstract /...既然说了这样可以赋值,但是动手小伙伴说为什么我敲报错啊,如下: 编译报错了,在前面我们说过val修饰属性只能赋值一次,那在这里val修饰属性我们是不能再次赋值。...在Kotlin没有这个关键字,而是伴生对象,具体用法 使用的话直接People.ID。 13 单例模式 在Kotlin使用object修饰类时候,该类是单例对象。

1.6K20

Kotlin 作用域函数(scope function)

说到不用起名字,lambda 本身就有“匿名函数”外号,这样使用方法可以说十分贴切了。从耦合程度来看,代码块介于函数和过程代码之间。...泛型我就默认懂了,毕竟这里只讲 Kotlin 新东西,Kotlin 泛型和 Java 泛型除了写法没有什么区别。剩下三个概念我们简单过一下吧。...我们可以因此得出结论:由于编译器编译时会把 inline 函数内联到实际调用位置,所以使用 run 方法不会有方法调用性能损耗。...对于了解到这个额外信息 Kotlin 编译器,他就可以更有针对性优化这里代码(怎么针对,也还没有学到。。)。 4. 为何 Java 没有作用域函数?...没有内联能力 Java,虽然有 JVM 内联优化支撑,但内联优化只对 final 且调用次数数量级较大方法有效。如果像 Kotlin 这样规模化使用作用域函数,对性能是有不可忽视影响

98310

玩转Kotlin 彻底弄懂Lambda和高阶函数

更确切说:Lambda是一个未声明函数,会以表达式形式传递 为什么要用Lambda 设想一下,在Android中实现一个View点击事件,可以使用如下实现: View view = findViewById...在Lambda函数体中,调用了viewClicked(v: View?)方法。...({v – viewClicked(v) }) 在 Kotlin 中有一个约定,如果函数最后一个参数是一个函数,并且传递一个 lambda 表达式作为相应参数,可以在圆括号之外指定它 因此可以实现如下...view.setOnClickListener{v – viewClicked(v) } 总结: Lambda和高阶函数理解起来有点绕,需要大量练习和实验才能慢慢理解(一些复杂代码写多了 习惯了之后自然而然没有为什么要这样写了...哈哈) 文章一开始我们说了使用Lambda可以省去接口定义和实现这一环节,但是是有条件,此接口必须只有一个抽象方法需要实现,才可以使用Lambda替代(比如OnClickListener、OnItemClickListener

3K10

介绍Kotlin第一部分(翻译篇)

print("Hello World") 现在,我们已经看到了不同于java地方。有一些我们熟悉东西()表示函数调用,但没有分号去结尾,不过看起来也很整齐。...在我们第一个我们不返回任何东西,所以我们可以省略到类型,在这种情况下可以使用Unit。在第二个函数中,我们定义必须返回一个String,使用return语句。...最后一个比较令人费解,没有括号,只是一个等号。这意味着fun是一个表达式,它可以自动返回。 正如你所看到,在表达式返回类型上是可选。...在上面的代码块中给了我们提示: 命名约定以大写字母开头 没有括号 还有就是在这个例子中没有可见性修改 我们仍然使用class关键字 第二个例子是相似的,但它有一个构造函数。...这些when表达式有一些有趣地方,它们可以使用任何类型表达式进行判断,许多情况下,可以捆绑在一起,而对于数值,可以判断它们范围。

63440
领券