这一直困扰我一段时间:switch语句的最佳布局是什么,特别是在PHP中?
我发现自己这样做有两种方式,甚至没有考虑过。然后,有时当我回到代码时,我觉得它看起来不正确,并以另一种方式重写它。重复!
switch($action)
{
case 'a':
//do something
break;
case 'b':
//do something
break;
}
优点:
缺点:
switch($action)
{
case 'a':
//do something
break;
case 'b':
//do something
break;
}
优点:
缺点:
所以我的问题是,布局切换语句的正确方法是什么?我在使用方法1时错了吗?
答案 0 :(得分:18)
switch($action)
{
case 'a' :
{
//do
//something
break;
}
case 'b' :
{
//do
//something
break;
}
}
或更紧凑
switch( $action ) {
case 'a' : {
//do
//something
break;
}
case 'b' : {
//do
//something
break;
}
}
完全可选但有效的括号语法。极大地提高了可读性,特别是对于非常大的案例陈述。
答案 1 :(得分:7)
以下格式化方式是我在其他人的代码中看到的最多,也是我喜欢格式化的方式:
switch($action)
{
case 'login':
$this->userLogin($username);
break;
case 'post':
$this->userPost($username);
break;
case 'update':
$this->userUpdate($username);
break;
case 'logout':
$this->userLogout($username);
break;
}
我也看到它像这样使用过。注意缩进?实际上它是有道理的,因为动作(执行某些操作的代码)只有一个缩进,远离{
和}
括号,就像常规function
或if
一样声明。然而,对我来说,它使已经奇怪的switch
陈述更加奇怪。
switch($action)
{
case 'login':
$this->userLogin($username);
break;
case 'post':
$this->userPost($username);
break;
case 'update':
$this->userUpdate($username);
break;
case 'logout':
$this->userLogout($username);
break;
}
当我有一个很长的switch
语句时,每个语句只有一个动作,我有时会使用以下方法。我认为这使它非常易读。
switch($action)
{
case 'login' : $this->userLogin($username); break;
case 'post' : $this->userPost($username); break;
case 'update' : $this->userUpdate($username); break;
case 'logout' : $this->userLogout($username); break;
}
使用return
时看起来更好,在这种情况下不需要break
:
switch($action)
{
case 'login' : return $this->userLogin($username);
case 'post' : return $this->userPost($username);
case 'update' : return $this->userUpdate($username);
case 'logout' : return $this->userLogout($username);
}
就像一个例子,它甚至可以像这样格式化,而不是使用{
和}
括号,而是使用:
和endswitch
:
switch($action):
case 'login' : return $this->userLogin($username);
case 'post' : return $this->userPost($username);
case 'update' : return $this->userUpdate($username);
case 'logout' : return $this->userLogout($username);
endswitch;
答案 2 :(得分:5)
很抱歉发布这个作为答案,但我无法将其纳入评论:
我更喜欢方法2,因为:
休息不会干扰 案件的可读性
有时您会在条件内休息,例如:
if(...) {
break;
}
所以案件可以落入到下一个案例或什么的。
对于我个人的偏好,在这种情况下使用方法1会感觉很尴尬,因为break
似乎缩进“太多”。
答案 3 :(得分:1)
没有正确或不正确的方法; switch语句语法是非平衡的,因此没有方法可以“正确”。
事实上的标准似乎是第二种方法。但是如果您对编程语言感到满意,那么缩进方案并不重要,只要对于给定的代码块使用 。
答案 4 :(得分:-2)
switch($option){
case 'a':
//do something;
break;
case 'b':
//do something;
break;
default:
break;
}
答案 5 :(得分:-2)
都不是。
不是"我有更好的方法,你应该使用它而不是#34;但是"没关系。"
许多程序员都会对间距,缩进等进行肛门保留。但重点是代码是可读的,因为它不会影响它实际运行的方式。您可以通过间距,缩进,额外的行返回,分隔部分的漂亮注释等来使代码可读。
这没关系:
switch ('hi'){
case 'hi':
PRINT "HI!";}
这也没关系:
switch ('hi')
{
case 'hi':
PRINT "HI!";
}
也没关系:
switch ('hi'){
case 'hi': PRINT "HI!";
}
非常非标准且耗时,所以我不知道你做了什么,但也没关系:
// *
switch ('hi')
{
// ****
case 'hi': PRINT "HI!";
// ****
}
// *
说真的,只要人们能够阅读并轻易辨别出正在发生的事情,那就没问题了。
除非你的同事和编码员非常专注于一种风格和强迫症。此时,您需要将所有代码更正为不同的样式,以使您的工作场所不那么无聊。
注意:我开玩笑说改变你的同事'代码来改变他们的编码风格。这通常被视为被动攻击,只会使工作场所充满敌意。