计算机科学

首页 > 计算机科学

尤达条件式

2018-09-03 09:43:20     所属分类:程序设计语言语法

尤达条件式(也称为尤达标记法)在计算机编程的术语中,是一种编程风格,其中表达式的两个部分与条件语句中的典型顺序相反。 尤达条件式将表达式的常量部分放在条件语句的左侧。这个风格的名称源于星际大战绝地大师尤达的角色,他以非标准语法讲英语。

尤达条件式是WordPress和Symfony编码标准的一部分。

目录

  • 1 示例
  • 2 优点
  • 3 评论
  • 4 另见
  • 5 参考
  • 6 外部链接

示例

通常计算机编程中的条件语句会写成:

if ( $value == 42 ) { /* ... */ }
// Reads like: "If the value is equal to 42..."

尤达条件式描述相同的表达方式,但反转:

if ( 42 == $value ) { /* ... */ }
// Reads like: "If 42 equals the value..."

常量写在比较运算符的左侧,要测试其值的变量写入右侧。这个次序相媲美于尤达的非标准口语风格, 大约是宾主动语序(例如,“当九百岁你活到,看起来很好你将不”)。


优点

在表达式中放置常量值不会改变程序的行为(除非此值被评估为false,请参见下文)。在使用单个等号(=)运行赋值操作 而非条件关系比较的编程语法中,可能发生的错误使程序产生意料之外的赋值操作,而并非如程序员原意要编写关系判断的条件语句。

if (myNumber = 42) { /* ... */ }
// This assigns 42 to myNumber instead of evaluating the desired condition

使用尤达条件式的优点:

if (42 = myNumber) { /* ... */ }
// This is a syntax error and will not compile

由于 42 是一个无法变动的固定常量,因此编译器会捕捉到该错误。

Boolean myBoolean = true;
if (myBoolean = null) { /* ... */ }
// This causes a NullPointerException in Java Runtime, but legal in compilation.

它也可以解决一些不安全的null类型行为。

String myString = null;
if (myString.equals("foobar")) { /* ... */ }
// This causes a NullPointerException in Java

以尤达条件式:

String myString = null;
if ("foobar".equals(myString)) { /* ... */ }
// This is false, as expected


评论

有评论认为尤达条件式的缺乏可读性是一个缺点,超过了上述优点。一些编程语言如Python和Swift之中是不允许在条件式中进行对变量赋值操作的, 借由定义赋值表达式不会被评估就没有任何值,在这种情况是不可能发生这类错误的。许多编译器会对如if (myNumber = 42)的源码发出警示消息(例如,GCC-Wall选项会警告括号语句中的赋值为真),让程序员发现可能的错误点。 在JavaScript中如ESLint之类的语法建议程序,可以警告条件式中出现赋值操作。尤达条件式写法避免null行为的优点也可被认为是一个缺点,因为空指针错误或被隐藏,并只出现在程序后期中。 当比较非基本类型时,这种写法在C++中出现了另一个缺点,因为 == 是一个运算符,并可能没有定义适当的重载运算符函数。例如:CComBSTR与字符串文本比较,写成(L"Hello" == cbstrMessage),不会对应到重载的函数。

另见

参考

[1]

[2]

[3]

[4]

[5]

[6]

[7]

外部链接

本条目的部分内容翻译自英语条目Yoda_conditions并以知识共享-署名-相同方式共享3.0协议授权使用。原文作者列表请参阅其页面历史
  1. ^ PHP Coding Standards – Make WordPress Core. Make.wordpress.org. [2016-11-12]. 
  2. ^ Pullum, Geoffrey K. Yoda's Syntax the Tribune Analyzes; Supply More Details I Will!. Itre.cis.upenn.edu. Language Log. 2005-05-18 [2014-12-22]. One way to look at Yoda's syntax is that it shows signs of favoring OSV syntax (Object-Subject-Verb) as the basic order in the simple clause. 
  3. ^ The StarWars.com 10: Best Yoda Quotes. starwars.com. Lucasfilm, Ltd. 2013-11-26 [2014-12-22]. When nine hundred years old you reach, look as good you will not. 
  4. ^ Quotes for Yoda (Character). imdb.com. Amazon. [2014-12-22]. When nine hundred years old *you* reach, look as good *you* will not, hmm? 
  5. ^ The Swift Programming Language (Swift 3.0.1): Basic Operators. Developer.apple.com. 2016-10-27 [2016-11-12]. 
  6. ^ disallow assignment operators in conditional statements. eslint.org. [2017-02-17]. 
  7. ^ CComBSTR::operator. Msdn.microsoft.com. [2016-11-12]. 
  8. 版权声明:本文由北城百科网创作,转载请联系管理获取授权,未经容许转载必究。https://www.beichengjiu.com/computerscience/340502.html

    显示全文

    取消

    感谢您的支持,我会继续努力的!

    扫码支持
    支付宝扫一扫赏金或者微信支付5毛钱,阅读全文

    打开微信扫一扫,即可进行阅读全文哦


    上一篇:SQL语法
    下一篇:关注点分离
    相关推荐
    爱淘宝