JavaRush /Java 博客 /Random-ZH /尤达条件
MAX
第 16 级
Киров

尤达条件

已在 Random-ZH 群组中发布
谨向《星球大战》和 Java / JavaRush 的所有粉丝致以一篇简短的文章,以纪念《星球大战》第五集发布 40 周年! 尤达条件 - 1有时你可以在互联网上找到很多有趣的东西,有一天我遇到了一个乍一看相当有趣的编程实践,称为尤达条件。简而言之,尤达条件(也称为尤达表示法)是一种编程风格,其中条件语句中熟悉的比较表达式的两个部分颠倒了:
if (5 == a) {
    // do something
}
这种风格可以用在具有类似 C 语法的语言中,最常见的是带有ifand 的表达式while
if (0 == variable) {
    // do something
}

while (false == endingCondition) {
    // do something
}
为什么将常量表达式移到比较运算符的左侧? 让我们假设一个假设的情况,在马拉松式地看完了传奇的 全部 九个六个部分之后,我们没有睡觉,坐下来为我们的宠物项目编写一些代码,并编写了以下内容:
void checkNumber(int a)
{
    if (a = 13) // Здесь-то и появляется так называемый unexpected behavior!
    {
        printf("Number is 13");
    }
}
在这种情况下,每次运行程序时,无论传递给方法的Number is 13"参数如何, 您都会收到字符串。这不是我们所期望的!逻辑错误在新手程序员中经常发生(相信我,我知道)。但在编译阶段,像 13 = a 这样的代码会产生一个错误,我们当然不会忽视这个错误,因为整数值是一个常量,因此不能改变(变成“a”)。 аcheckNumber(int a)尤达条件 - 1

使用尤达条件有利有弊。

光面:

  1. 当我们的目标是比较时,防止分配给变量。

  2. 解决不安全的“空行为”问题 ( NullPointerException) // 来自维基百科的示例

  3. 没有尤达:

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

    与尤达:

    String myString = null;
    if ( "foobar".equals(myString) ) { // Результат - Ложь
       /* не выполняется */
    }

暗面:

  1. 对于查看代码的人来说,代码的可读性变得更加复杂,从而增加了代码感知的负担。
  2. 范围狭窄,仅使用相等比较或与常量比较,检查是否为空。
  3. 许多编译器已经“看到”此类错误,并提前警告潜在错误的存在。
Yoda 表示法的替代方法是单元测试。在旧共和国时代,据说执行良好的测试将确保代码没有错误,并且只执行其编写的功能。你知道哪些有用的做法?在评论中分享您的知识!并写下您最喜欢的剧集! 愿原力与你同在!
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION