将额外代码添加到 for 循环的递增步骤
Adding extra code to the increment step of a for loop
喜欢编程的同学。我已经使用 java 编程 4 年了,我觉得我对这门语言的工作原理有相当好的理解。然而,最近,我偶然发现了一件让我颇为吃惊的事情。在考虑 for 循环时,我想到了 "Hey the increment part of a for loop is just an operation, can I put other things in there?",最终经过一番尝试,我决定尝试这个:
for(int i = 0; i < 10; i++, System.out.print("foo"), System.out.print("bar")){}
这是一个完全空的 for 循环,打印调用在循环的递增步骤中。令我惊讶的是,这个循环运行正常,并且每次循环都会打印 foo 和 bar。据我所知,您可以根据需要在其中放置任意数量的方法。
那这是什么?我搜索了它,但没有找到任何东西。我从来没有学过这个。应该避免吗?应该使用吗?为什么它甚至可以工作?我找不到任何显示使用示例的资源。真正的程序员的任何意见都会很高兴听到!
for 循环的语法只是写出几行代码的一种简化方式。第一部分是初始化,第二部分是有条件的,第三部分是你想要的! (在大多数情况下是一个迭代器)。大多数人不会在那里放任何东西,因为这看起来很奇怪,或者他们只是喜欢以特定的方式组织他们的代码。
Java Language Specification 涵盖了这一点。摘录:
if the ForUpdate part is present, the expressions are evaluated in sequence from left to right; their values, if any, are discarded.
应该用吗?在我看来,没有。它使代码更难阅读,而且根本不符合惯用语。
好吧,您可以将 for 循环想象成 while 循环,它为您提供了一些 "nice" 格式:例如循环
for(int i = 0; i < 10; i++){
...
}
等同于:
int i = 0;
while(i < 10){
...
i++;
}
请注意,for 循环基本上只是将您在递增部分中写入的内容放入循环的末尾,就在它跳回开始之前。所以你放在那里的所有东西基本上都会被添加到循环内代码的末尾。你可以试试这个也许可以更好地了解正在发生的事情:
for(int i = 0; i < 5; System.out.println("i before" + i),i++, System.out.println("i after" + i)){
System.out.println("Inside");
}
打印出:
Inside
i before0
i after1
Inside
...
作为旁注:我绝对不会那样使用它,因为它只会让代码更难理解,并没有真正的好处。
喜欢编程的同学。我已经使用 java 编程 4 年了,我觉得我对这门语言的工作原理有相当好的理解。然而,最近,我偶然发现了一件让我颇为吃惊的事情。在考虑 for 循环时,我想到了 "Hey the increment part of a for loop is just an operation, can I put other things in there?",最终经过一番尝试,我决定尝试这个:
for(int i = 0; i < 10; i++, System.out.print("foo"), System.out.print("bar")){}
这是一个完全空的 for 循环,打印调用在循环的递增步骤中。令我惊讶的是,这个循环运行正常,并且每次循环都会打印 foo 和 bar。据我所知,您可以根据需要在其中放置任意数量的方法。
那这是什么?我搜索了它,但没有找到任何东西。我从来没有学过这个。应该避免吗?应该使用吗?为什么它甚至可以工作?我找不到任何显示使用示例的资源。真正的程序员的任何意见都会很高兴听到!
for 循环的语法只是写出几行代码的一种简化方式。第一部分是初始化,第二部分是有条件的,第三部分是你想要的! (在大多数情况下是一个迭代器)。大多数人不会在那里放任何东西,因为这看起来很奇怪,或者他们只是喜欢以特定的方式组织他们的代码。
Java Language Specification 涵盖了这一点。摘录:
if the ForUpdate part is present, the expressions are evaluated in sequence from left to right; their values, if any, are discarded.
应该用吗?在我看来,没有。它使代码更难阅读,而且根本不符合惯用语。
好吧,您可以将 for 循环想象成 while 循环,它为您提供了一些 "nice" 格式:例如循环
for(int i = 0; i < 10; i++){
...
}
等同于:
int i = 0;
while(i < 10){
...
i++;
}
请注意,for 循环基本上只是将您在递增部分中写入的内容放入循环的末尾,就在它跳回开始之前。所以你放在那里的所有东西基本上都会被添加到循环内代码的末尾。你可以试试这个也许可以更好地了解正在发生的事情:
for(int i = 0; i < 5; System.out.println("i before" + i),i++, System.out.println("i after" + i)){
System.out.println("Inside");
}
打印出:
Inside
i before0
i after1
Inside
...
作为旁注:我绝对不会那样使用它,因为它只会让代码更难理解,并没有真正的好处。