?操作员不工作

发布于 2024-09-28 14:10:40 字数 87 浏览 3 评论 0原文

这怎么不可能呢?我的表达开始非法。

(s1.charAt(i) == ' ') ? i++ : break;

How come this is not possible? I am getting illegal start of expression.

(s1.charAt(i) == ' ') ? i++ : break;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

情魔剑神 2024-10-05 14:10:40

这里需要理解的是,?: 运算符用于返回值。您基本上是在该行中调用一个如下所示的函数:

anonymous function:
    if(s1.charAt(i) == ' '):
        return i++;
    else:
        return break;

没有意义,对吧? ?: 运算符仅被设计为上述 if/else 返回语句的简写,而不是完全替代 if/else。

The thing to understand here is that the ?: operator is used to return a value. You're basically calling a function that looks like this in that line:

anonymous function:
    if(s1.charAt(i) == ' '):
        return i++;
    else:
        return break;

Makes no sense, right? The ?: operator was only designed as a shorthand for if/else return statements like the above, not a replacement of if/else altogether.

遇见了你 2024-10-05 14:10:40

您不能在三元条件表达式的一部分中使用 break,因为 break 本身不是表达式,而只是一个控制流语句。

为什么不直接使用 if-else 结构呢?

if (s1.charAt(i) == ' ') {
    i++;
} else {
    break;
}

You cannot use break in part of a ternary conditional expression as break isn't an expression itself, but just a control flow statement.

Why not just use an if-else construct instead?

if (s1.charAt(i) == ' ') {
    i++;
} else {
    break;
}
香草可樂 2024-10-05 14:10:40

三元运算符是一个表达式,而不是一个语句。为此,请使用 if ... else ...

The ternary operator is an expression, not a statement. Use if ... else ... for this.

一身仙ぐ女味 2024-10-05 14:10:40

当然有效。但它是一个运营商。从什么时候开始,诸如“break”之类的语句成为了操作数?

Of course it works. But it's an operator. Since when was a statement such as 'break' an operand?

好菇凉咱不稀罕他 2024-10-05 14:10:40

我建议避免使用三元 (?:) 运算符,除非是简单的赋值。在我的职业生涯中,我见过太多疯狂的嵌套三元运算符;它们成为令人头疼的维护问题(更多的认知超载 - “不要让我思考!”)。

我不会禁止我的团队使用它们,但建议明智地使用它们。仔细使用它们比相应的 if/else 结构更清晰: -

public int ifFoo() {
    int i;

    if( isSomethingTrue()) {
        i = 5;
    }
    else {
        i = 10;
    }

    return i;
}

与三元替代方案相比: -

public int ternaryFoo() {
    final int i = isSomethingTrue()
                ? 5
                : 10;

    return i;
}

三元版本是: -

  • 更短
  • 更容易理解(当然是我的观点!)
  • 允许变量是“最终”;这简化了代码的理解;在更复杂的方法中,阅读代码的人知道没有进一步的代码会尝试修改变量 - 无需担心的事情。

I recommend avoiding the ternary (?:) operator EXCEPT for simple assignments. In my career I have seen too many crazy nested ternary operators; they become a maintenance headache (more cognitive overload - "don't make me think!").

I don't ban them on my teams, but recommend they are used judiciously. Used carefully they are cleaner than a corresponding if/else construct: -

public int ifFoo() {
    int i;

    if( isSomethingTrue()) {
        i = 5;
    }
    else {
        i = 10;
    }

    return i;
}

Compared to the ternary alternative: -

public int ternaryFoo() {
    final int i = isSomethingTrue()
                ? 5
                : 10;

    return i;
}

The ternary version is: -

  • Shorter
  • Easier to understand (my opinion, of course!)
  • Allows the variable to be "final"; which simplifies code comprehension; in a more complex method, someone reading the code knows no further code will try and modify the variable - one thing less to worry about.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文