V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
banxi1988
V2EX  ›  程序员

真不是心血来源-想写下程序员的苦逼生活与NULL

  •  
  •   banxi1988 ·
    banxi1988 · 2013-09-08 22:15:44 +08:00 · 5961 次点击
    这是一个创建于 4094 天前的主题,其中的信息可能已经有所发展或是发生改变。
    自从写C开始就没有少被null坑过.
    然后到java也一直被NullPointerException折磨.
    到了SQL了,NULL也是一个令人头痛的问题.
    相信大家都有过类似的经历.

    还请各位分享下,跟NULL值有关的苦痛史及跳出这个坑的一些经验吧!
    36 条回复    1970-01-01 08:00:00 +08:00
    felix021
        1
    felix021  
       2013-09-08 22:22:48 +08:00
    心血来[潮]……

    其实我觉得还好,写了这么多年C,没有被坑得很厉害的感觉。LZ被坑得多,可能跟编码习惯也有关系。
    fangzhzh
        2
    fangzhzh  
       2013-09-08 22:24:27 +08:00
    话说有个公司新进了一个员工,英文名叫null, 然后公司的OA崩溃了
    banxi1988
        3
    banxi1988  
    OP
       2013-09-08 22:29:26 +08:00   ❤️ 1
    @felix021
    晕,我居然选错字了.
    还好,上学那会写C比较多,经常段错误.呵呵.
    编码习惯的话,确实可能有关系.在null的语言中,就必须时刻想着这东西是不是空..
    但是很多时候有意无意有忘了.
    我现在的开始使用避免这种null的策略,就是想着用NullObject模式来处理.
    banxi1988
        4
    banxi1988  
    OP
       2013-09-08 22:30:28 +08:00
    @fangzhzh
    哈哈,应该是个段子吧?
    不会真有此事吧! 这不是真的.呵呵.
    SoloCompany
        5
    SoloCompany  
       2013-09-08 22:39:17 +08:00
    NullPointerException 总比 Segment Fault 要好吧楼主?
    xavierskip
        6
    xavierskip  
       2013-09-08 22:42:26 +08:00
    None
    clowwindy
        7
    clowwindy  
       2013-09-08 22:45:00 +08:00
    前几天豆瓣改版后,Feed 里出现了

    None 说:
    None
    eggacher
        8
    eggacher  
       2013-09-09 09:08:41 +08:00
    nil
    gangsta
        9
    gangsta  
       2013-09-09 09:13:48 +08:00   ❤️ 2
    "a billion-dollar mistake"...

    stackoverflow上有类似经典问题:
    http://stackoverflow.com/questions/271526/avoiding-null-statements-in-java

    除了你说的NullObject,也可以参考下Guava里的做法:
    http://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained
    roricon
        10
    roricon  
       2013-09-09 09:34:47 +08:00
    @fangzhzh 这条点赞了!
    sojingle
        11
    sojingle  
       2013-09-09 09:43:14 +08:00
    其实在使用 Objective-C 之前,平时写代码都会注意空指针检查,被坑得倒也不多,长时间使用 OC 之后再去用其他语言来写,各种被坑!T_T
    zencoding
        12
    zencoding  
       2013-09-09 10:47:27 +08:00
    @fangzhzh 本周最佳冷笑话
    Mutoo
        13
    Mutoo  
       2013-09-09 10:53:13 +08:00
    func = func || function(){}

    func(); // what is null...
    wupher
        14
    wupher  
       2013-09-09 11:04:45 +08:00
    同意@sojingle,你应该转去做iOS开发就好。
    so898
        15
    so898  
       2013-09-09 11:47:26 +08:00
    竟然有人说转去OB-C就没有Null问题,简直就是开玩笑……
    通过NSJSONSerialization处理完成的NSDictionary里面的Null简直就是无法处理啊!
    换成id和NSNull对比还是不能得出正确结论啊!一会可以一会不行啊!
    输出NSString内容一会"<null>"一会空白啊!
    这尼玛就是坑啊!
    再一个那个逗逼NSNull竟然和id有一样的Function啊!啥时候转换成空的都不清楚啊!
    jedyu
        16
    jedyu  
       2013-09-09 11:53:53 +08:00
    NULL都不是大问题,gdb bt一下不就全出来了。
    Wild pointer才是头痛的,Code review是关键
    banxi1988
        17
    banxi1988  
    OP
       2013-09-09 20:39:16 +08:00
    @so898 哈哈我也被这个坑过.因为返回的json有null的.
    我的解决方法是:
    如果这个obj对应的json为null的话,
    它其实是一个NSString的东西,一般不会出空白吧.
    将它强制转成NSString之后再做字符串比较..
    (NSString*)obj == "<null>"
    nil
        18
    nil  
       2013-09-09 20:48:37 +08:00
    nil
    l0wkey
        19
    l0wkey  
       2013-09-09 21:54:37 +08:00
    null
    none
    null
    none...
    jesse_luo
        20
    jesse_luo  
       2013-09-09 23:16:14 +08:00
    pclint一定程度可以帮助检测空指针,野指针才是真凶残……而且是害别人……
    sojingle
        21
    sojingle  
       2013-09-10 00:46:08 +08:00
    @so898 嘿嘿,一直做工具类应用,很少碰 JSON ^_^
    so898
        22
    so898  
       2013-09-10 02:22:11 +08:00
    @banxi1988
    这个样没有办法对应“JSON字段不存在”的情况……
    我现在都是强转id进行NSNull检查,然后再做NSString <null>判断
    alexrezit
        23
    alexrezit  
       2013-09-10 06:47:24 +08:00 via iPhone
    @so898
    为什么我觉得这是你自己的问题?
    nulloo
        24
    nulloo  
       2013-09-10 08:17:27 +08:00
    一只null路过……
    holy_sin
        25
    holy_sin  
       2013-09-10 09:20:25 +08:00
    我也想玩纯C
    holy_sin
        26
    holy_sin  
       2013-09-10 09:20:58 +08:00
    LZ 用纯C编什么软件啊
    so898
        27
    so898  
       2013-09-10 09:24:13 +08:00
    @alexrezit 这是个坑,不是个问题
    125204412
        28
    125204412  
       2013-09-10 09:34:56 +08:00
    一只写java很少犯null的 轻轻飘过
    alexrezit
        29
    alexrezit  
       2013-09-10 10:01:59 +08:00
    @so898
    NSNull 是一个 object...
    pdshr
        30
    pdshr  
       2013-09-10 16:04:53 +08:00
    家里的弟弟最近不知怎么了就想学软件工程师,做程序猿,偶是再三反对,反对无效倒是不说了,现在搞的全家都把我当外人了,桑心啊,谁能帮我劝住他
    banxi1988
        31
    banxi1988  
    OP
       2013-09-10 18:25:23 +08:00
    @pdshr
    虽然路是自己走的.虽然我觉得写代码很cool,但是
    这个你还是发个贴,让大家想想办法吧.
    唉!
    dorentus
        32
    dorentus  
       2013-09-10 18:53:00 +08:00
    @so898 他们说的是 nil。JSON 里面的 null 值有时是有语义的,和直接没有值不一样(如果是你们自己的数据的话,这个是你们自己定的吧)。

    你要是不怕坑到自己的话,可以写个 NSNull 的 category 把你想要的方法都补给它啊……
    so898
        33
    so898  
       2013-09-10 19:07:13 +08:00
    @dorentus
    我印象中坑了我几万年的就是逗比新浪微博开放平台……
    Category我已经跳了无数次了,在各种情况下……最后都是在HP只剩1的情况下爬出来了……
    anson0370
        34
    anson0370  
       2013-09-11 00:36:37 +08:00
    Java 中 null 不是个 object 这一点实在是太2了……同样2的还有包装类型和简单类型共存

    Guava 用 Optional<T> 试图解决这个问题,Scala 也同样的使用 Option[T] 来解决
    guangwong
        35
    guangwong  
       2013-09-11 11:26:44 +08:00
    如果不用null,怎么解决之前null覆盖的问题。我在做一个DSL,我也不喜欢他,可是不知道怎么替代。
    aisk
        36
    aisk  
       2013-09-11 11:43:01 +08:00
    推荐一下Rust,没有null
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2730 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:03 · PVG 23:03 · LAX 07:03 · JFK 10:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.