Лучший макет для заявления переключателя PHP?
Какое-то время это мучило меня: каков наилучший макет для оператора switch, особенно в PHP?
Я делаю это одним из двух способов, даже не задумываясь. Затем, иногда, когда я возвращаюсь к коду, я чувствую, что он выглядит неправильно, и переписываю его по-другому. Повторение!
Способ 1
switch($action)
{
case 'a':
//do something
break;
case 'b':
//do something
break;
}
Преимущества:
- Я чувствую, что регистр / разрывы совпадают, как в скобках в выражениях switch / if.
- Это выглядит лучше на мой взгляд
Недостатки:
- Он не соответствует официальной документации PHP по адресу http://php.net/manual/control-structures.switch.php
Способ 2
switch($action)
{
case 'a':
//do something
break;
case 'b':
//do something
break;
}
Преимущества:
- Это соответствует "официальному" формату, используемому на http://php.net/manual/control-structures.switch.php
Недостатки:
- Глядя на код, и я сталкиваюсь с разрывом, я иногда чувствую, что в операторе if отсутствует пропущенная конечная скобка, потому что он до сих пор имеет отступ.
Итак, мой вопрос: как правильно составить операторы переключения макетов? Я ошибаюсь при использовании метода 1?
6 ответов
Извините, что опубликовал это как ответ, но я не смог уместить его в комментарии:
Я предпочитаю метод 2, потому что:
перерывы не мешают удобочитаемости кейсов
и иногда вы будете иметь перерывы в условиях, например:
if(...) { break; }
поэтому дело может упасть до следующего дела или чего-то еще.
И для моего личного предпочтения было бы неловко использовать метод 1 в этом сценарии, так как
break
казалось бы, с отступом "слишком много".
Способ 3
switch($action)
{
case 'a' :
{
//do
//something
break;
}
case 'b' :
{
//do
//something
break;
}
}
или немного более компактный
switch( $action ) {
case 'a' : {
//do
//something
break;
}
case 'b' : {
//do
//something
break;
}
}
Полностью необязательный, но правильный синтаксис скобок. Имхо значительно улучшает читаемость, особенно для очень больших регистров.
Следующий способ форматирования - это то, что я больше всего вижу в коде других людей, а также способ, которым я предпочитаю его форматировать:
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;
Нет правильного или неправильного метода; Синтаксис оператора switch не сбалансирован, поэтому нет способа "сделать все правильно".
Стандарт де-факто, кажется, второй метод. Но если вы хорошо владеете языком программирования, схема отступов не имеет большого значения, если она используется последовательно для данного блока кода.
switch($option){
case 'a':
//do something;
break;
case 'b':
//do something;
break;
default:
break;
}
Ни.
Не "У меня есть лучший способ, и вы должны использовать его вместо этого", а "Это не имеет значения".
Многие кодировщики сохраняют анальный интервал, отступы и т. Д. Весь смысл в том, что код читабелен, так как он не влияет на его фактическую работу. Вы можете сделать код читаемым через интервалы, отступы, дополнительные возвраты строк, красивые комментарии, разделяющие разделы и т. Д.
Это нормально:
switch ('hi'){
case 'hi':
PRINT "HI!";}
Это тоже нормально
switch ('hi')
{
case 'hi':
PRINT "HI!";
}
Также все в порядке:
switch ('hi'){
case 'hi': PRINT "HI!";
}
Очень нестандартно и отнимает много времени, так что я не знаю, что бы вы сделали, но тоже хорошо:
// *
switch ('hi')
{
// ****
case 'hi': PRINT "HI!";
// ****
}
// *
Серьезно, пока люди могут читать это и легко различать, что происходит, это нормально.
Если только ваш коллега и коллега по программированию не слишком увлечены одним стилем и ОКР. В этот момент вам нужно исправить весь их код в другом стиле, чтобы сделать ваше рабочее место менее скучным.
Примечание: я шучу по поводу изменения кода ваших коллег, чтобы изменить их стили кодирования. Это обычно воспринимается как пассивная агрессия и просто делает рабочее место враждебным.