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

你知道 赋值语句其实是有返回值的吗?

  •  
  •   rizon · 318 天前 · 4863 次点击
    这是一个创建于 318 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天写代码,偶然从 google 工具类的源码中发现了赋值语句是有返回值的! 然后我瞬间想明白了,一个之前困扰我许久的 if 语句块中直接使用赋值语句的那个很久之前的问题。 /t/531367

    先放结果

        Long a;
        public Long test() {
            if ((a = 123L) == 321L) {
                System.out.println(a);
            }
            return a = 123L;
        }
    

    网上有人分析过汇编,https://blog.csdn.net/w605283073/article/details/85219022

    我估计还是有很多人不知道这件事,或者就是忘了,再或者就是没去想这个返回值是可以简化代码书写的。所以分享一下

    41 回复  |  直到 2019-03-12 06:24:43 +08:00
    1a0ma0
        1
    1a0ma0   318 天前 via iPhone
    这不是常识吗……
    smeraldo
        2
    smeraldo   318 天前
    火星😂。。
    liuzhedash
        3
    liuzhedash   318 天前
    没有被 i=i++这种考题折腾过嘛?
    Lin0936
        4
    Lin0936   318 天前
    这。。。。。
    congeec
        5
    congeec   318 天前
    你没用过 C 语言么?
    你不知道 python 3.8 的 assignment expression 么?
    lihongjie0209
        6
    lihongjie0209   318 天前
    C 就是这样,Java 从 C 直接抄过来的
    Raymon111111
        7
    Raymon111111   318 天前
    没读过源码吗...

    很多这种
    suit
        8
    suit   318 天前
    在 C++,运算符可以用函数重载,所以有返回值一点都不奇怪
    jeffersonpig
        9
    jeffersonpig   318 天前
    这真的是没几个人不知道的吧
    yim7
        10
    yim7   318 天前
    学 c 没遇到过吗 ,while ( (ch = getchar()) != '#') {}
    ballshapesdsd
        11
    ballshapesdsd   318 天前
    我一个学 python 的都知道(微笑)
    dorentus
        12
    dorentus   318 天前
    并不是所有编程语言的赋值语句都是可求值(有返回值)的。
    DOLLOR
        13
    DOLLOR   318 天前
    你知道逗号(,)其实是有返回值的吗?
    var a = (1, 2, 3);
    console.log(a);//=>3
    idyu
        14
    idyu   318 天前
    if(($erpRegistDateGeqUnix = strtotime($erpRegistDateGeq)) > 0) {
    $data['erpRegistDateGeq'] = date('Ymd', $erpRegistDateGeqUnix);
    }
    PHP
    zycpp
        15
    zycpp   318 天前 via iPhone
    c 语言刷题必备语句
    while((ch=getchar())!=EOF)
    HuHui
        16
    HuHui   318 天前 via Android
    b = (a+b) - (a=b);
    看来没学过这个
    expy
        17
    expy   318 天前
    a=b=c 大概就用到了吧。
    wingkou
        18
    wingkou   318 天前 via Android   ♥ 1
    @DOLLOR C 艹甚至还能重载逗号,这才是最骚的,lz 估计要更惊讶。
    183shl
        19
    183shl   318 天前 via Android
    初学时经常被 if 中写一个=困扰半天😁
    lazyfighter
        20
    lazyfighter   318 天前
    之前看源码的时候 这个东西困扰了我很久
    zsdroid
        21
    zsdroid   318 天前
    a = b = 123; 了解下
    qwertyegg
        22
    qwertyegg   318 天前
    早期 java 里面的读行标准做法


    while ((strLine = br.readLine()) != null) {
    System.out.println (strLine);
    }
    phpcyy
        23
    phpcyy   318 天前
    golang 里边好像不是这样的
    grewer
        24
    grewer   318 天前
    你也网上🏄啊
    gamexg
        25
    gamexg   318 天前
    c 里面容易出的一个错误

    if (i=1){
    }

    条件永远成立,所以后来出现另一种写法:

    if (1==i){
    }

    来解决误写的问题
    ExploreWay
        26
    ExploreWay   318 天前
    哇,了解了,第一次看到,不过这种操作知识特殊一些,实际用途大吗
    rochek
        27
    rochek   318 天前 via Android
    @gamexg 这种编译器会警告你的
    tabris17
        28
    tabris17   318 天前
    不同的语言不一样
    另外:1L+1
    dosmlp
        29
    dosmlp   318 天前
    作为 c++程序员,这是常识吧,操作符也是函数的一种
    darknoll
        30
    darknoll   318 天前   ♥ 1
    什么叫赋值语句的返回值,语句哪有什么返回值,这是表达式的值
    gamexg
        31
    gamexg   318 天前
    @rochek #27 是的,所以现在不流行 1 == i 的写法了。
    jswh
        32
    jswh   318 天前
    不是所有语言的复制语句都有返回值。
    jswh
        33
    jswh   318 天前
    @jswh 赋值
    chiu
        34
    chiu   318 天前 via Android
    写错过 if(i=1),但程序还能跑,应该就知道赋值语句是有返回值的了
    masker
        35
    masker   318 天前 via Android
    “我读了 Google 工具类的代码,好像发现一个不得了的事情,赶紧上 V2EX 炫一下我读了 Google 工具类的代码”
    carlclone
        36
    carlclone   318 天前
    所以赋值不该有返回值 , 就不会出现少写个=号出 bug 的问题了
    Joyboo
        37
    Joyboo   318 天前
    1L +1 常识问题
    MrUser
        38
    MrUser   318 天前
    心疼 LZ 一秒,LZ 只是好心科谱一下,哈哈
    Death
        39
    Death   318 天前
    大多数语言的 spec 里会给出语句是否是一个值的说明
    hirasawayui
        40
    hirasawayui   318 天前
    你以为自己发现了新大陆,谁知道。。。是辆公交车
    Arxz
        41
    Arxz   317 天前
    区分 expression 和 statement 不是基础吗
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   727 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 28ms · UTC 20:13 · PVG 04:13 · LAX 12:13 · JFK 15:13
    ♥ Do have faith in what you're doing.