• 请不要在回答技术问题时复制粘贴 AI 生成的内容
rizon
V2EX  ›  程序员

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

  •  
  •   rizon ·
    othorizon · Mar 11, 2019 · 8566 views
    This topic created in 2798 days ago, the information mentioned may be changed or developed.

    今天写代码,偶然从 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 replies  •  2019-03-12 06:24:43 +08:00
    1a0ma0
    1a0ma0
    Mar 11, 2019 via iPhone
    1
    这不是常识吗……
    smeraldo
    smeraldo
    Mar 11, 2019
    2
    火星😂。。
    liuzhedash
    liuzhedash
    Mar 11, 2019
    3
    没有被 i=i++这种考题折腾过嘛?
    ezrealinxh
    ezrealinxh
    Mar 11, 2019
    4
    这。。。。。
    congeec
    congeec
    Mar 11, 2019
    5
    你没用过 C 语言么?
    你不知道 python 3.8 的 assignment expression 么?
    lihongjie0209
    lihongjie0209
    Mar 11, 2019
    6
    C 就是这样,Java 从 C 直接抄过来的
    Raymon111111
    Raymon111111
    Mar 11, 2019
    7
    没读过源码吗...

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


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

    if (i=1){
    }

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

    if (1==i){
    }

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