Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> как добраться до объекта? 
V
    Опции темы
ksnk
Дата 14.10.2008, 16:10 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



bobik02, 
Цитата

Цитата(HackMan @  13.10.2008,  12:39 )
а зачем после default ставить break?

Встречный вопрос: а зачем его не ставить ? 

А потомушта в описании оператора switch в документации его не ставят  smile 
Да и буквы лишние не нужны...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
sTa1kEr
Дата 14.10.2008, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(ksnk @  14.10.2008,  17:10 Найти цитируемый пост)
А потомушта в описании оператора switch в документации его не ставят

Если в примере документации будет синтаксическая ошибка, вы ее тоже перенесете к себе в проект?

В данном случае, наличие или отсутсвие break  - это всего-лишь стиль. И не столько важно "плохой" это или "хороший" стиль кода, намного важнее, что бы это был единственный стиль, которого всегда придерживается разработчик. 
Собственно по этому вопросу есть отдельная тема: Правила хорошего кода
PM MAIL   Вверх
ksnk
Дата 14.10.2008, 18:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата

Если в примере документации будет синтаксическая ошибка, вы ее тоже перенесете к себе в проект?

Конечно! Откуда я могу знать, что это синтаксическая ошибка, а не новая фича языка? А вот когда мне доступно объяснит php, что я не прав, я пойду на php.net и грязно матерясь напишу комментарий к статье и статью поправят. Есть определенная польза в том, что проект заморожен в развитии на несколько лет  smile Документация уже не содержит явно видимых синтаксических ошибок.

Кстати, я нигде не встречал break после default..., плохо искал?

Добавлено через 1 минуту и 44 секунды
9 страниц "хорошего тона" ниасилил  smile ... Поточнее можно?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
bobik02
Дата 14.10.2008, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 26.11.2007

Репутация: 2
Всего: 14



Цитата(ksnk @  14.10.2008,  18:28 Найти цитируемый пост)
9 страниц "хорошего тона" ниасилил  smile ... Поточнее можно?

Очень часто поднимается подобный вопрос. 
повтор
Совершенного стандарта не существует, стиль кодирования - вопрос личных предпочтений.
В конечном, счёте не важно какой стиль выбрать, важно - строго придерживаться выбранного стиля.
(Все же не стоит писать неряшливый и малопонятный и называть его выбранным стилем)


--------------------
Have a nice day
PM   Вверх
bars80080
Дата 14.10.2008, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(ksnk @  14.10.2008,  18:28 Найти цитируемый пост)
Конечно! Откуда я могу знать, что это синтаксическая ошибка, а не новая фича языка? А вот когда мне доступно объяснит php, что я не прав, я пойду на php.net и грязно матерясь напишу комментарий к статье и статью поправят. Есть определенная польза в том, что проект заморожен в развитии на несколько лет   Документация уже не содержит явно видимых синтаксических ошибок.

да, тысячу раз да. здесь нет всемогущих, которым дозволено знать всё. если не доверять документации, то чему же тогда?
а вот когда уже после осознания ошибки, опознания, что вся существующая документция по этому вопросу ошибочна, дискуссий и разборок, тогда уже следует добиваться исправления самой документации

сам тоже, впервые сталкиваюсь с default: break; это же просто не логично и соответственно выглядит некашерно.
PM MAIL WWW   Вверх
sTa1kEr
Дата 14.10.2008, 21:46 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(ksnk @  14.10.2008,  19:28 Найти цитируемый пост)
Конечно! Откуда я могу знать, что это синтаксическая ошибка, а не новая фича языка?

Может от PHP интерпретатора? Syntax error - слышали когда-нибудь о такой новой фичи? 
Программист - это не тот, кто знает синтаксис языка и может скомпилировать/интерпретировать пару десятков строк кода, а тот кто умеет размышлять и понимает, что он делает и к чему приведет любая строчка написанного им кода.
А копи-паст чужого кода (даже примеров из официальной документации) без понимания оного приведет только к плачевным результатам.

Цитата(ksnk @  14.10.2008,  19:28 Найти цитируемый пост)
Документация уже не содержит явно видимых синтаксических ошибок.

Ошибаетесь, содержит, особенно на русском языке и в русских зеркалах.

Цитата(ksnk @  14.10.2008,  19:28 Найти цитируемый пост)
Кстати, я нигде не встречал break после default..., плохо искал?

Возможно стоило заглянуть на http://php.net/switch ?

Код

switch($beer)
{
    case 'tuborg';
    case 'carlsberg';
    case 'heineken';
        echo 'Good choice';
    break;
    default;
        echo 'Please make a new selection...';
    break;
}


И собственно почему это считается плохим стилем:
1.
Цитата

Here, if $i is equal to 0, PHP would execute all of the echo statements! If $i is equal to 1, PHP would execute the last two echo statements. You would get the expected behavior ('i equals 2' would be displayed) only if $i is equal to 2. Thus, it is important not to forget break statements (even though you may want to avoid supplying them on purpose under certain circumstances).

2. Читабельность кода всегда лучше, когда блок кода явно обозначен. То же относится, на пример, к конструциям вроде:
Код

if ($condition)
   someDo();

3. PHP всегда был очень лоялен к подобного рода вольностям, во многих других-же языках отсутствие break даже в кейсе default вызвало бы ошибку компиляции/парсинга.

Цитата(bars80080 @  14.10.2008,  20:51 Найти цитируемый пост)
если не доверять документации, то чему же тогда?

Своей голове надо в первую очередь доверять. 

Цитата(ksnk @  14.10.2008,  19:28 Найти цитируемый пост)
Поточнее можно? 

Это я сказал к тому, что данная тема имеет заголовок "как добраться до объекта?", а ссылку на тему с заголовком "Правила хорошего кода" я привел выше. Хотя и так уже оффтопика не мало.



Это сообщение отредактировал(а) sTa1kEr - 14.10.2008, 21:49
PM MAIL   Вверх
bars80080
Дата 14.10.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(sTa1kEr @  14.10.2008,  21:46 Найти цитируемый пост)
Своей голове надо в первую очередь доверять. 

моя голова туда и сюда, в ней мыслей много и синтаксис не часто с ней совпадает

я как инженер должен доверять справочникам, и это догма.
на том простом основании, что я не могу всего знать, зато должен уметь всё найти. если размышлять головой, то никакого логического обоснования появления break в конце switch - просто нет, а то что в каких-то компиляторах отсутствие его вызывает ошибку, так что с того? может в другим именно его наличие вызывает ошибку?
PM MAIL WWW   Вверх
ksnk
Дата 14.10.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата

Возможно стоило заглянуть на http://php.net/switch ?

Ну да, если не считать, что остальные 4 примера свитча совсем даже без брейка после дефолта... 
Цитата

Ошибаетесь, содержит, особенно на русском языке и в русских зеркалах.

Угу... Можно еще примеры с форума поцитировать smile. Документация - это php.net. Все остальное - это на любителя...
Цитата

Поточнее можно? 

Это я сказал к тому, что данная тема имеет заголовок...

В той теме - 9 страниц рассуждений о личных предпочтениях... Это там предлагалось учится "хорошему тону"? Ссылка на рекомендации Zend'а или того-же PEAR были бы значительно более точными адресами. Не так ли?
Цитата

...
И собственно почему это считается плохим стилем:

Может из-за точек с запятой после case'ов... Я хотел было позлорадствовать по поводу синтаксических ошибок, но PHP меня почему-то не поддержал  smile 

Действительно, много флейма, извиняюсь....
С другой стороны как-то зацепила безапеляционная реклама странной с моей точки зрения синтаксической конструкции. :


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
sTa1kEr
Дата 15.10.2008, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(ksnk @  15.10.2008,  00:18 Найти цитируемый пост)
Ну да, если не считать, что остальные 4 примера свитча совсем даже без брейка после дефолта... 

То это, конечно же, полностью объясняет
Цитата(ksnk @  14.10.2008,  19:28 Найти цитируемый пост)
Кстати, я нигде не встречал break после default..., плохо искал?


Цитата(ksnk @  15.10.2008,  00:18 Найти цитируемый пост)
Угу... Можно еще примеры с форума поцитировать smile. Документация - это php.net. Все остальное - это на любителя...

Не надо придумывать того, что я не говорил. Именно официальную документацию я и имел ввиду, php.net,
Цитата

Russian Federation
    ru.php.net  FR-Net
    ru2.php.net  Cronyx Plus LLC


Это сообщение отредактировал(а) sTa1kEr - 15.10.2008, 01:48
PM MAIL   Вверх
ksnk
Дата 15.10.2008, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(sTa1kEr @  15.10.2008,  01:40 Найти цитируемый пост)
То это, конечно же, полностью объясняет

imho, объясняет... Такую конструкцию, как приводится там я, к примеру, видел первый раз в жизни и  сначала принял за синтаксически неправильную. (думал головой? smile )... и естественно ни ее, ни встреченный ТОЛЬКО ТАМ ,break после default, в трезвом уме применять бы ни стал ...

Цитата(sTa1kEr @  15.10.2008,  01:40 Найти цитируемый пост)
Именно официальную документацию я и имел ввиду, php.net,
Russian Federation
    ru.php.net  FR-Net
    ru2.php.net  Cronyx Plus LLC

И что? Пусть даже и в этих официальных документациях часто ли встречались случаи синтаксических ошибок в операторе switch? А в каких-нибудь других базовых конструкциях языка? Я все равно не стану считать русскую документацию официальной, я достаточно страдал от разных локализаций, но неужели такое возможно? после нескольких лет правки этой самой документации..

Обычно, "стиль" кодинга кроме эстетического удовлетворения и визуальной раскраски решает и более практические задачи - удобство cut&paste'a, удобство построчного комментирования ( отладки методом научного тыка), и т.д.

Наличие break в дефолтной ветке был бы полезен для возможности скопировать-трансформировать эту ветку в ветку case. для этого достаточно в свеже-с-paste'шенном блоке заменить заголовок. Но именно для switch, imho, это как раз и будет дурной практикой, так как логика дефолтной ветки, нередко сильно отличается от логики case веток... Осмысленность-же обязательного расположения break'а в последней ветке свитча для меня вообще тайна великая есть, особенно для скриптового языка...

P.S. Топикстартер, кстати, "пошел другим путем", так что флеймить тут нам почти никто не помешает smile




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
HackMan
Дата 15.10.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 8
Всего: 9



Хватит спорить. sTa1kEr ещё в самом начале правильно сказал:
Цитата(sTa1kEr @  14.10.2008,  18:18 Найти цитируемый пост)
В данном случае, наличие или отсутсвие break  - это всего-лишь стиль. И не столько важно "плохой" это или "хороший" стиль кода, намного важнее, что бы это был единственный стиль, которого всегда придерживается разработчик. 


PHP устроен так, что в конструкции switch ищет тот case, который подходит и выполняет всё что ниже его до первого break. Иногда даже логичнее эти самые break не ставить. Например, нам надо x умножить на двойку в степени n (где n<=5)

Можно сделать так, с break:
Код

switch ($n)
  {
    case 1:
      $x *= 2;
      break;

    case 2:
      $x *= 4;
      break;

    case 3:
      $x *= 8;
      break;

    case 4:
      $x *= 16;
      break;

    case 5:
      $x *= 32;
      break;
  }



А если сделать без break - код получится меньше
Код

switch ($n)
  {
    case 5:
      $x *= 2;

    case 4:
      $x *= 2;

    case 3:
      $x *= 2;

    case 2:
      $x *= 2;

    case 1:
      $x *= 2;
  }


Это первый пример, который пришёл в голову. Пусть не самый удачный, но пример  smile Мне же на практике не раз встречались задачи (посложнее и логичнее  smile ), где не использование break шло только на пользу.


А цитату из документации
Цитата(sTa1kEr @  14.10.2008,  21:46 Найти цитируемый пост)
Here, if $i is equal to 0, PHP would execute all of the echo statements! If $i is equal to 1, PHP would execute the last two echo statements. You would get the expected behavior ('i equals 2' would be displayed) only if $i is equal to 2. Thus, it is important not to forget break statements (even though you may want to avoid supplying them on purpose under certain circumstances).

не стоит рассматривать как что-то более, чем напоминание о том, что не стоит забывать ставить break.

Это сообщение отредактировал(а) HackMan - 15.10.2008, 10:32


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
MoLeX
Дата 15.10.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(HackMan @  15.10.2008,  10:17 Найти цитируемый пост)
Например, нам надо x умножить на двойку в степени n (где n<=5)

Цитата(HackMan @  15.10.2008,  10:17 Найти цитируемый пост)
Пусть не самый удачный


и он меня не убедил что не надо использовать бряк после default



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
HackMan
Дата 15.10.2008, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 8
Всего: 9



MoLeX, а я и не убеждал, что break не надо использовать после default, как и не убеждал в обратном  smile 

Практического смысла от break после default маловато (в случае, если у тебя default всегда стоит после всех case), но стиль есть стиль.

Это сообщение отредактировал(а) HackMan - 15.10.2008, 10:42


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
sTa1kEr
Дата 15.10.2008, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(ksnk @  15.10.2008,  03:53 Найти цитируемый пост)
Пусть даже и в этих официальных документациях часто ли встречались случаи синтаксических ошибок в операторе switch?

Не часто и не в switch, но иногда встречаются ошибки (в.т.ч. синтаксические) в примерах документации. И как показали ответы из багрепорта, в русских локализациях их не слишком торопятся исправлять.

Цитата(ksnk @  15.10.2008,  03:53 Найти цитируемый пост)
Я все равно не стану считать русскую документацию официальной

Да суть не в этом, в оригинале так же бывают ошибки (просто их быстро исправляют в отличии от локализованной версии), все-таки док-ию пишут люди, а людям свойственно ошибатся. 
Собственно это я все к тому, что нужно не только примеры рассматривать, но и само описание конструкций, где кстати ясно объясняется зачем и где можно использовать break + рекомендация использовать всегда.

Цитата(ksnk @  15.10.2008,  03:53 Найти цитируемый пост)
Осмысленность-же обязательного расположения break'а в последней ветке свитча для меня вообще тайна великая есть

|
Цитата(MoLeX @  13.10.2008,  14:04 Найти цитируемый пост)
по сути это правила хорошего кода. 

Цитата(sTa1kEr @  14.10.2008,  19:18 Найти цитируемый пост)
В данном случае, наличие или отсутствие break  - это всего-лишь стиль.

Цитата(bobik02 @  14.10.2008,  19:59 Найти цитируемый пост)
Совершенного стандарта не существует, стиль кодирования - вопрос личных предпочтений.

Кто тут говорил про обязательное расположение?

А спорить насколько это хороший или плохой стиль можно бесконечно, так же как спорить о том, обрамлять блок кода из одной строчки в фигурные скобки или нет.
PM MAIL   Вверх
MoLeX
Дата 15.10.2008, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(sTa1kEr @  15.10.2008,  10:50 Найти цитируемый пост)
А спорить насколько это хороший или плохой стиль можно бесконечно, так же как спорить о том, обрамлять блок кода из одной строчки в фигурные скобки или нет. 

сколько людей, столько и мнений (с)


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все 1 [2] 3 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1105 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.