为什么每个人都告诉我编写这样的代码是一种不好的做法?
if (foo)
Bar();
//or
for(int i = 0 i < count; i++)
Bar(i);
Run Code Online (Sandbox Code Playgroud)
省略花括号的最大理由是它有时可以是它们的两倍.例如,下面是一些为C#中的标签绘制发光效果的代码.
using (Brush br = new SolidBrush(Color.FromArgb(15, GlowColor)))
{
for (int x = 0; x <= GlowAmount; x++)
{
for (int y = 0; y <= GlowAmount; y++)
{
g.DrawString(Text, this.Font, br, new Point(IconOffset + x, y));
}
}
}
//versus
using (Brush br = new SolidBrush(Color.FromArgb(15, GlowColor)))
for (int x = 0; x <= GlowAmount; x++)
for (int y = 0; y <= GlowAmount; y++) …Run Code Online (Sandbox Code Playgroud) 我查看了Raphael.js源代码,了解他如何将RGB值转换为HSB.我发现了他所做的功能,当我碰到这个漂亮的三嵌套三元运算符时,我正在将它转换为Python:
H = (C == 0 ? null :
V == r ? (g - b) / C :
V == g ? (b - r) / C + 2 :
(r - g) / C + 4
);
Run Code Online (Sandbox Code Playgroud)
它引发了我一个循环,因为Python没有Javascript所做的那种三元运算符.我花了一段时间查看它并最终将这个有点理智的代码(仅使用if/else)从中删除:
if (C == 0) {
H = null;
} else {
if(V == r) {
H = (g - b) / C;
} else {
if(V == g) {
H = (b - r) / C + 2; …Run Code Online (Sandbox Code Playgroud) 今年开始编程的我的一位大学同事有时写下这样的陈述:
if(something) doA();
else
if(something2) doC();
else doD();
Run Code Online (Sandbox Code Playgroud)
他被认为第二if-else对被视为单个实体,并且它实际上嵌套在第一对之下else.
但是,我确信他的代码相当于:
if(something) doA();
else if(something2) doC();
else doD();
Run Code Online (Sandbox Code Playgroud)
这表明第二个else实际上并不是嵌套的,而是与第一个if相同的级别.我告诉他,他需要用花括号来达到他想要的效果.
"但我的代码按预期工作!"
事实上,它按预期工作.事实证明代码的行为是相同的,即使else没有嵌套.
令人惊讶的是,我发现自己无法写出一个清晰简洁的例子,显示出不同的行为
if(something) doA();
else
if(something2) doC();
else doD();
Run Code Online (Sandbox Code Playgroud)
和
if(something) doA();
else {
if(something2) doC();
else doD();
}
Run Code Online (Sandbox Code Playgroud)
你能帮我找一个例子,告诉我的同事使用/不使用花括号之间的区别吗?
或者,就行为而言,看起来不正确的版本总是等同于花括号的版本?
对于任何这样放置大括号的人:
void f() {
stuff();
}
Run Code Online (Sandbox Code Playgroud)
您更喜欢如何在长初始化列表之后放置大括号?
一样的方法?
Object::Object()
: foo(1)
, bar(2) {
stuff();
}
Run Code Online (Sandbox Code Playgroud)
或者例外,这样你就可以真正看到初始化列表的结束位置?
Object::Object()
: foo(1)
, bar(2)
{
stuff();
}
Run Code Online (Sandbox Code Playgroud)
或者留一个空行?
Object::Object()
: foo(1)
, bar(2) {
stuff();
}
Run Code Online (Sandbox Code Playgroud)
或者也许制作一个奇怪的混合体?
Object::Object()
: foo(1)
, bar(2)
{
stuff();
}
Run Code Online (Sandbox Code Playgroud)
或者滥用缩进
Object::Object()
: foo(1)
, bar(2) {
stuff();
}
Object::Object() : foo(1)
, bar(2) {
stuff();
}
Run Code Online (Sandbox Code Playgroud)
在这个小例子中,一切都很漂亮,但是启动了十几个初始化程序和一个中等长度的函数体,这很快就会发生变化。
所以我试图创建一个非常简单的程序来练习一些基本的Java格式化技巧.然而,关于"fight()"的一些事情正在让我的编译器疯狂.谁知道为什么?提前感谢我收到的任何答案,代码如下:
class Hero{
String name;
int Intelligence;
boolean parents;
public static fight(Hero1, Hero2){
if(Hero1.Intelligence>Hero2.Intelligence){
return(Hero1.name+" is the winner");
else
return(Hero2.name+" is the winner");
}
}
}
class HeroMain{
public static void main(String[] args){
Hero Superman = new Hero();
Superman.name = "Superman";
Superman.Intelligence = 7;
Superman.parents = false;
Hero Batman = new Hero();
Batman.name = "Batman";
Batman.Intelligence = 8;
Batman.parents = false;
public fight(Superman, Batman);
}
}
Run Code Online (Sandbox Code Playgroud) 我是java的新手,试图从这本书中学习一门课程并且我坚持制作一个程序.如果没有错误并且无法找到标记为guessdigit1&2的符号,请继续告诉我.
当我将鼠标悬停在符号旁边的错误对话框上时,它一直说guessdigit1和2是他们自己的类.任何的想法?谢谢!
package loterry;
import java.util.Scanner;
public class Loterry {
// This program creates two random numbers, and checks to see if your guess
// makes the lottery win
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter in your guess for loterry, two digits please");
int lottery = (int)(Math.random()*100 /50);
int guess = input.nextInt();
int lotterydigit1= lottery /10;
int lotterydigit2= lottery %10;
// Get digits from guess
int guessdigit1 = guess / 10;
int guessdigit2 = …Run Code Online (Sandbox Code Playgroud) 嗨,我想在 WPF 中最大化窗口,我使用以下几行:
private void mnu_maximize_Click(object sender, RoutedEventArgs e)
{
if (main.WindowState == System.Windows.WindowState.Maximized)
main.WindowState = System.Windows.WindowState.Normal;
main.WindowState = System.Windows.WindowState.Maximized;
}
Run Code Online (Sandbox Code Playgroud)
但问题是当我再次单击以将恢复窗口恢复到正常状态时,它无法正常工作并且处于最大化状态。
那么我该如何解决这个问题?
java ×3
c ×2
c# ×2
c++ ×2
coding-style ×2
if-statement ×2
javascript ×1
methods ×1
nested ×1
wpf ×1