首页
学习
活动
专区
圈层
工具
发布

(译)Swift2.2-可选链

类型,或称为“可空的Int”。如上例所示,当residence为nil的时候,可空的Int将会为nil,表明无法访问numberOfRooms。...但是没有返回值的方法隐式返回Void类型,如无返回值函数中所述。这意味着没有返回值的方法也会返回()或者空的元组。 如果在可空值上通过可空链式调用来调用这个方法,这个方法的返回类型为Void?...,而不是Void,因为通过可空链式调用得到的返回值都是可空的。这样我们就可以使用if语句来判断能否成功调用printNumberOfRooms()方法,即使方法本身没有定义返回值。...需要注意的是,上面的例子中,street的属性为String?。john.residence?.address?.street的返回值也依然是String?,即使已经进行了两次可空的链式调用。...在下面的例子中,通过可空链式调用来调用Address的buildingIdentifier()方法。这个方法返回String?类型。正如上面所说,通过可空链式调用的方法的最终返回值还是String?

85930

使用“空”对象替代引用是否为空判断

,空引用异常就无法避免。...而且这种对象是否为空的判断还会传播,在一系列函数调用的过程中,其中某一个调用返回一个null值, 这个函数调用栈中所有的调用都有可能受到波及,直到最外层的调用。...同样,在方法返回值为其它对象类型的时候也可以借鉴并扩展这种思路。...原本调用Site对象GetCustomer有可能返回的null值被NullCustomer类的实例所代替, 这样代码的外部可以放心的使用GetCustomer的返回值,不用再提心吊胆的生怕返回空值,也不用做是否为空的判断...如果要确定GetCustomer的返回值是否为空的情况,可用调用customer对象的IsNull方法         Customer customer = site.GetCustomer();

9.2K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Kotlin 的 Nothing 详解

    而且如果我把函数的名字改一下,再加个注释: /** 当遇到姓名为空的时候,请调用这个函数来抛异常 */ fun throwOnNameNull() : String { throw NullPointerException...可以把它改成 Unit: /** 当任何变量为空的时候,请统一调用这个函数来抛异常 */ fun throwOnNameNull() : Unit { throw NullPointerException...不过,Kotlin 又进了一步,提供了一个额外的选项:你还可以把它改成 Nothing: /** 当任何变量为空的时候,请统一调用这个函数来抛异常 */ fun throwOnNameNull() :...一个元素类型为Nothing 的 List,将会导致我无法找到任何的元素实例来填充进去,但是这个 List 本身是可以被创建的: val emptyList: List = listOf...{ return // 语法层面的返回值类型为 Nothing,赋值给 name } println(name) } 虽然直接强行解释为「return 想怎么写就怎么写」也是可以的,

    70530

    java空指针报错_空指针异常是什么意思

    使用那些已经对 null 值做过判断的方法,如 String#equals、String#valueOf、以及三方库中用来判断字符串和集合是否为空的函数: if (str !...,当结果为空时,不要返回 null 值,而是返回一个空的集合;如果返回值类型是对象,则可以选择抛出异常。...Optional.empty() : Optional.of(trimmed); }); 方法的链式调用很容易引发空指针异常,但如果返回值都用 Optional 包装起来,就可以用 flatMap 方法来实现安全的链式调用了...当可空类型被使用时,就必须进行空值检测。 var a: String = "text" a = null // 错误:无法将 null 赋值给非空 String 类型。 val b: String?...length // 强制忽略,可能引发空值异常 Kotlin 的特性之一是与 Java 的可互操作性,但 Kotlin 编译器无法知晓 Java 类型是否为空,这就需要在 Java 代码中使用注解了,而

    3.1K30

    使用 Resharper 特性

    因为 Resharper 无法修改编译所以他只能提示语法,不能告诉编译错误,使用下面的特性可以让Resharper提示开发者语法,一般在开发库就需要用到这些特性。...CanBeNullAttribute 表示属性或参数可能为空,返回值可能为空。 使用了这个特性,就可以告诉 Resharper 在使用这个属性、参数之前需要先判断是不是空。...标记了参数 NotNull 是告诉调用的时候不要传入为空,函数还是需要判断传入是否空。 这个可以标记在 函数返回值和属性,如果标记为函数返回,那么这个函数一定不要返回空。...ItemNotNullAttribute 表示一个列表的所有参数都不为空 如果判断一个项为空,就会提示这个为true,一般用在函数返回 ItemCanBeNullAttribute 和上面不同,表示列表可能存空的...PureAttribute 表示一个方法不会修改状态,如果不使用他的返回值,那么这个方法和没有调用是一样的。

    1K20

    Golang 语言怎么避免空指针引发的 panic

    空指针就是未分配内存的指针类型的变量,变量的值是 nil,因为操作空指针会引发 panic,所以我们在程序开发中要特别小心。...02 结构体指针类型返回值 在调用结构体指针类型返回值的函数或方法时,并且需要操作返回值的字段或方法,此时,我们就需要注意触发空指针引发的 panic。...*User 类型的返回值,因为返回值变量是空指针,当我们访问返回值的字段时,程序引发 panic。...避免此类空指针问题,一是可以在返回值包含指针类型变量的函数或方法中,在函数体开头初始化返回值的指针类型变量;二是在调用结构体指针类型返回值的函数或方法时,在操作返回值的字段或方法时,先判定返回值是否为...() 获取 *User 类型的返回值,因为返回值变量是空指针,当我们访问返回值的方法 Login() 时,程序触发空指针引发 panic。

    3.6K11

    java中空指针异常情况以及解决办法

    参考链接: Java中的空指针异常 概述:  出现空指针异常,常常是因为我们调用的对象是空的而抛出的异常。 ...问题描述:  第一种:   out.println(request.getParameter("username"));  如果request里面并没有username的值,这时无法对空对象进行操作的,...如果返回值与常量进行比较时,就可以避免调用null对象的equals方法。不会抛出异常。  第三种: 假设有一个student类,有属性name。 ...Student a; String b = a.name; 这个时候就会报错,因为a为空的,解决办法就是让a指向一个对象,Student a = new Student();  问题定位:  对于日志中的报错信息...= null) {     object.toString();) } // 使用toString()这种方法的话,如果object为空的话,就会抛出异常  String.valueOf(object)

    2.1K10

    09.Go语言-函数

    形式参数列表:函数的参数名以及参数类型,这些参数作为局部变量,其值由参数调用者提供,函数中的参数列表和返回值并非是必须的。...返回值列表:函数返回值的变量名以及类型,如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。 如果有连续若干个参数的类型一致,那么只需在最后一个参数后添加该类型。...如果传多个参数的类型都不一样,可以指定类型为 ...interface{} ,然后再遍历。...("作者名称为空") return } // 不使用 := 因为已经在返回值那里声明了 info = bookName + ",作者:" + authorName // 直接返回即可...当方法的首字母为 大写 时,这个方法对于 所有包 都是 Public ,其他包可以随意调用。 当方法的首字母为 小写 时,这个方法是 Private ,其他包是无法访问的。

    58930

    TypeScript never 类型

    它用于表示不返回值的函数的返回类型:例如,永远循环的函数,始终抛出异常信号的函数等。 因为底部类型被用于表示不会正常的返回,一般没有返回值。...(这并不一定意味着该程序无法终止;子例程可以终止而不返回其调用者,或通过某种其他方式退出); 作为错误的指示器。...); } // 推断的返回值类型为never function fail() { return error("Some error happened"); } // 返回never的函数必须存在无法达到的终点...方法中的控制流程,这时候 else 分支的 foo 类型会被收窄为 boolean 类型,导致无法赋值给 never 类型,这时就会产生一个编译错误。...该函数没有正常完成,这意味着它可能会抛出异常或根本无法退出执行。 never 类型为底部类型,也称为零类型或空类型。它通常表示为⊥,表示计算未将结果返回给调用方。

    4.7K10

    From Java To Kotlin 2:Kotlin 类型系统与泛型终于懂了

    是因为存在特例void,在Java中如果声明的函数没有返回值,那么它就需要用void来修饰。...当 Nothing 类型作为函数参数时,一个有趣的现象就出现了: ```kotlin // 这是一个无法调用的函数,因为找不到合适的参数 fun show(msg: Nothing) {} show(...由于 Nothing 的构造函数是私有的,我们将无法调用 show 函数,除非我们抛出异常,但这没有意义。 这个概念在泛型星投影的时候是有应用的,具体后面会解释。...Kotlin 编译器不会检查它们是否为 null,所以需要程序员**自己负责**。如果要避免空指针异常,可以使用安全调用运算符(?.)或非空断言运算符(!!)来处理平台类型。...length) // 安全调用,如果 name 为 null 则返回 null println(name!!.

    88350

    JSON.stringify()与JSON.parse()

    你说的是因为转换中有 toJSON()方法并且有返回值(retuen)才会替代当前的对象。如果有 toJSON()方法但是没有返回值是不是就不会替换当前这个对象了呢?...我们接着往下看,看看还有什么什么黑魔法无法序列化错误对象,错误对象将会被转为为空对象// 创建了一个错误对象const err = new Error('错的不是我,而是这个世道。')...objCopy = JSON.parse(JSON.stringify(obj));// 发现类型是字符串console.log('类型是', typeof objCopy.dateTime)// 因为是字符串就无法调用原来日期的...因为它会将日期对象最后变成字符串。从而导致之前的日期方法不能够调用。...JSON.string() 转换的值中,如果有 toJSON() 方法,那么返回值直接代替了当前的这个对象 2.有 toJSON() 方法没有返回值会返回 undefined3.无法序列化错误对象,错误对象将会被转为为空对象

    84810

    【译】尝试使用Nullable Reference Types

    对于引用类型为空的情况,如果Find()方法返回不出来内容,我们希望返回默认值。我们希望Resize以接受可能为空的输入,但我们希望确保Resize调用的时候,引用传递的数组值始终为非空。...MyQueue案例也有点特殊,因为它是通用的。如果结果为false,则TrydeQueue应为result提供空值,但仅当T是引用类型时才提供空值。如果T是一个结构体,则它不会为空。...MaybeNullWhen(bool)表示即使类型不允许参数为空,参数也可以为空,条件也是该方法的bool返回值。它们可以在任何参数类型上指定。...所以这个方法签名完成了我想要表达的。 但是,如果路径不为空,我们希望确保始终返回一个字符串。也就是说,我们希望getFileName的返回值不为空,以路径为空为条件。这是无法表达的。...DoesNotReturn向编译器发出一个信号,说明在该点之后不需要进行可以为空的分析,因为代码是不可访问的。 当调用MyAssert并且传递给它的条件为false时,它将引发异常。

    4.4K10

    Swift基础语法(三)函数

    因为是单一的表达式,所以无需写return,编译期会自动判断 注意: 若没有返回值有三种写法 返回Void,Void其实就是(),Void是()空元祖的别名(注意Void的V是大写,跟其他语言不一样...,在外部调用时仍然要写参数名称,而不能直接写参数 1.3.2 默认参数 可以在定义函数时添加默认参数时,这样在调用函数时可以不传入这个参数的值 演示代码 func check(name: String...参数、返回值的具体使用,可以看到和block的使用完全一致,有对block不太清楚的同学可以看我的另一篇博客13 - block的认识和使用 3.1 函数类型 示例代码: //数据类型为:()->()...或者()->Void func test(){ print("lalala") } //数据类型为:(Int,String) -> (Int,Double) func test2(a: Int,b: String...()函数的数据类型为:(Int,String) -> (Int,Double) 3.2 作为变量 示例代码: //(Int,Int) -> Int func sum2(a:Int,b:Int) -> Int

    84730

    类型声明与空安全(Void Safety)

    这意味着如果一个变量的类型为 String,则他在任何时候都不可能为空。 观察 string3 我们可以得出: 声明对象为 String? 类型,可以将其设置为空。...典型场景是,在你初始化这个变量的时候,还暂时无法得到其值,就必须用可空类型的声明方法了。 观察 string4,string5 我们可以得出: 类型推断是完全根据初始化时的赋值来确定的。...Kotlin 可空(Nullable)类型的调用 声明一个非空变量,意味着你可以随意的调用他的方法而不用担心空指针错误,相对应的,可空变量则无法保证了。...Kotlin 可空(Nullable)的传递性 如果一个可空对象调用了方法,因为这个方法有可能不被执行,那么如果我们接收它的返回值,那么返回值的类型应该是什么呢?...所以,可空是具有传递性的。 双叹号由于在变量为空时会抛出异常,所以它的返回值就还是为 Int,因为抛了异常的话,后面的代码已经不会被执行了。

    1.3K50

    Python 工匠:让函数返回结果的技巧

    这样的设计似乎很合理。 然而在函数的世界里,以编写具备“多功能”的瑞士军刀型函数为荣不是一件好事。这是因为好的函数一定是 “单一职责(Single responsibility)” 的。...这样的函数也更不容易在未来因为需求变更而被修改。 而返回多种类型的函数一定是违反“单一职责”原则的,好的函数应该总是提供稳定的返回值,把调用方的处理成本降到最低。...但是在 Python 世界里,这并非解决此类问题的最佳办法。因为这种做法会增加调用方进行错误处理的成本,尤其是当很多函数都遵循这个规范而且存在多层调用时。...,它永远只会返回 Item 类型或是抛出异常 虽然我在这里鼓励使用异常,但“异常”总是会无法避免的让人 感到惊讶,所以,最好在函数文档里说明可能抛出的异常类型 异常不同于返回值,它在被捕获前会不断往调用栈上层汇报...Martin Fowler 在他的经典著作《重构》 中用一个章节详细说明过这个模式。简单来说,就是使用一个符合正常结果接口的“空类型”来替代空值返回/抛出异常,以此来降低调用方处理结果的成本。

    3K40

    Python 工匠:让函数返回结果的技巧

    这样的设计似乎很合理。 然而在函数的世界里,以编写具备“多功能”的瑞士军刀型函数为荣不是一件好事。这是因为好的函数一定是 “单一职责(Single responsibility)” 的。...这样的函数也更不容易在未来因为需求变更而被修改。 而返回多种类型的函数一定是违反“单一职责”原则的,好的函数应该总是提供稳定的返回值,把调用方的处理成本降到最低。...但是在 Python 世界里,这并非解决此类问题的最佳办法。因为这种做法会增加调用方进行错误处理的成本,尤其是当很多函数都遵循这个规范而且存在多层调用时。...,它永远只会返回 Item 类型或是抛出异常 虽然我在这里鼓励使用异常,但“异常”总是会无法避免的让人 感到惊讶,所以,最好在函数文档里说明可能抛出的异常类型 异常不同于返回值,它在被捕获前会不断往调用栈上层汇报...Martin Fowler 在他的经典著作《重构》 中用一个章节详细说明过这个模式。简单来说,就是使用一个符合正常结果接口的“空类型”来替代空值返回/抛出异常,以此来降低调用方处理结果的成本。

    2.7K10

    Python 工匠:让函数返回结果的技巧

    这样的设计似乎很合理。 然而在函数的世界里,以编写具备“多功能”的瑞士军刀型函数为荣不是一件好事。这是因为好的函数一定是 “单一职责(Single responsibility)” 的。...这样的函数也更不容易在未来因为需求变更而被修改。 而返回多种类型的函数一定是违反“单一职责”原则的,好的函数应该总是提供稳定的返回值,把调用方的处理成本降到最低。...但是在 Python 世界里,这并非解决此类问题的最佳办法。因为这种做法会增加调用方进行错误处理的成本,尤其是当很多函数都遵循这个规范而且存在多层调用时。...,它永远只会返回 Item 类型或是抛出异常 虽然我在这里鼓励使用异常,但“异常”总是会无法避免的让人 感到惊讶,所以,最好在函数文档里说明可能抛出的异常类型 异常不同于返回值,它在被捕获前会不断往调用栈上层汇报...Martin Fowler 在他的经典著作《重构》 中用一个章节详细说明过这个模式。简单来说,就是使用一个符合正常结果接口的“空类型”来替代空值返回/抛出异常,以此来降低调用方处理结果的成本。

    3.1K30

    【Kotlin】DSL 领域特定语言 ( apply 标准库函数分析 | 普通匿名函数 | 扩展匿名函数 | 泛型扩展匿名函数 )

    都为空 ; 扩展匿名函数 : String.() -> Unit , 这个函数 是 为 具体的 String 类型定义的扩展函数 ; 泛型扩展匿名函数 : T.() -> Unit , 这个函数 是为..., 函数类型是 (参数类型列表) -> 返回值类型 , 如 : () -> Unit 类型表示是 参数为空 , 返回值也为空的函数 ; () -> String 类型表示是 参数为空 , 返回值类型为...String 类型的函数 ; (Int) -> String 类型表示是 参数为 Int 类型 , 返回值类型为 String 类型的函数 ; 可参考 【Kotlin】Kotlin 函数总结 ( 具名函数...T. , 上述函数接收的就是一个 参数为空 , 返回值为空 的 Lambda 表达式 ; 4、扩展函数回顾 在回忆下扩展函数 , 为现有的类定义扩展函数 , 如 : 为 String 定义扩展函数 ;..., 只有 String 类型可以调用 apply 函数 , 其它类型就无法调用该函数了 ; 三、代码示例 ---- 1、自定义 apply 函数接收 普通匿名函数 参数 使用 this 关键字报错 代码示例

    87910

    #C语言——学习攻略:攻克 动态内存分配、柔性数组,根本不在话下!

    free() 的调用; --禁止重复释放,建议释放后立即置空。...--注意: --检查返回值:和 malloc() 一样,检查 calloc() 的返回值是否为NILL; -- 与 malloc() 的核心区别:calloc() 会进行初始化,而 malloc()...,函数调用 malloc 函数后没有对空间进行 free 释放,后续也无法释放,导致空间泄露; 程序崩溃--主函数调用函数将str传给函数,但是二者之间是传值调用,实参、形参是两个独立个体,函数对形参进行操作...后续将str置空,由于strcpy函数无法对空指针进行操作(无效地址),错误进行。...返回的这种结构大小不包括柔性数组的内存; 含柔性数组成员的结构体用malloc ()函数进行内存动态分配--因为之前的方法无法给柔性数组分配空间,且分配的内存应该大于结构体大小,以满足柔性数组预期大小

    22810
    领券