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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как бы вы написали? - 2 :) 
V
    Опции темы
 
Я напишу:
первый вариант [ 2 ]  [40.00%]
второй вариант [ 3 ]  [60.00%]
Всего проголосовавших: 5
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
maxipub
Дата 5.11.2014, 15:30 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



Свой вариант просьба не предлагать, интересует не оптимальный, а именно ваше предпочтение одного из двух.

Первый вариант:
Код

function name($param)
{
    if ($param === 1)
    {
        //...
        //...
        //...
        
        return;
    }

    if ($param === 2)
    {
        //...
        //...
        //...
        
        return;
    }

    if ($param === 3)
    {
        //...
        //...
        //...
        
        return;
    }

    if ($param === 4)
    {
        //...
        //...
        //...
        
        return;
    }
}



Второй вариант:
Код

function name($param)
{
    if ($param === 1)
    {
        //...
        //...
        //...
    }

    elseif ($param === 2)
    {
        //...
        //...
        //...
    }

    elseif ($param === 3)
    {
        //...
        //...
        //...
    }

    elseif ($param === 4)
    {
        //...
        //...
        //...
    }
}


Спасибо за голос! Не судите строго за глупый вопрос. smile  smile 
PM MAIL   Вверх
SoWa
Дата 5.11.2014, 15:36 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


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

Репутация: 6
Всего: 74



switch религия не позволяет использовать?  smile 


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
maxipub
Дата 5.11.2014, 16:07 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



SoWa, а вам придерживаться условий опроса? smile 
PM MAIL   Вверх
SoWa
Дата 5.11.2014, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


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

Репутация: 6
Всего: 74



maxipub, мне как-то за подобный вопрос на хабре карму слили, и теперь я атеист  smile
Ну а если серьезно - откуда взялись такие варианты? Интересно же smile


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Aliance
Дата 5.11.2014, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


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

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



Как придерживаться условий опроса, если они мягко говоря кажутся странными. Ведь для таких случаев switch и придумали. Но если уж религия не позволяет писать switch и есть желание городить забор из if/elseif - то второй вариант предпочтительней конечно.
PM MAIL WWW ICQ Skype   Вверх
s0lman
Дата 5.11.2014, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


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

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



Цитата(Aliance @  5.11.2014,  15:35 Найти цитируемый пост)
Ведь для таких случаев switch и придумали.

Один мой друзяка как-то рассказывал, что заставили на жабаскриптовом проекте переписать все свичи на ифы  smile Может о производительности шла речь, не помню уже.


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
maxipub
Дата 5.11.2014, 17:58 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



Да что там switch, я еще и ООП в разработке не использую! smile smile 

Если честно, мне симпатичней инструменты более низкого уровня что ли. Они универсальны. Зачем нам switch, если if проще и универсальней? Всуньте свой switch в функцию из примера, но с несколькими параметрами (массивом с параметрами). Не выйдет... Так что я не вижу смысла мешать в свой код то switch то if, если везде без каких-либо потерь можно обойтись последним. Впрочем, ни кого и не призываю действовать так же - личное дело. ;)

Продолжаем, голосуем... Всем спасибо за участие! smile 

Это сообщение отредактировал(а) maxipub - 5.11.2014, 17:59
PM MAIL   Вверх
SoWa
Дата 6.11.2014, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


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

Репутация: 6
Всего: 74



Цитата(maxipub @  5.11.2014,  17:58 Найти цитируемый пост)
Да что там switch, я еще и ООП в разработке не использую!   

Если честно, мне симпатичней инструменты более низкого уровня что ли. Они универсальны.

Я надеюсь, это сарказм?
Если нет - ваше дело, вы правы, но добрый совет - не светите этим так сильно(особенно на собеседованиях или с коллегами), не так поймут.
А пример про switch некорректный.
Во-первых, сделать switch от нескольких аргументов - изи. 
Во-вторых, как уже выше сказали - разные назначения switch/if, и слово "мешать" как-то слух режет в таком контексте. Это как "мешать" классы, абстрактные классы(в свете php) и интерфейсы - зачем интерфейсы и абстрактные классы, когда есть просто классы, если так размышлять?  smile 


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
maxipub
Дата 6.11.2014, 10:54 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



Цитата(SoWa @  6.11.2014,  10:00 Найти цитируемый пост)
Если нет - ваше дело, вы правы, но добрый совет - не светите этим так сильно(особенно на собеседованиях или с коллегами), не так поймут.

В компании, где я работаю, разработчик только один, так что мне тут особо не с кем "собеседоваться". smile 

Цитата(SoWa @  6.11.2014,  10:00 Найти цитируемый пост)
Во-первых, сделать switch от нескольких аргументов - изи.

Камон:
Код
function name($_param)
{
    if ($_param['notification'] === 'sms')
    {
        //...
        //...
        //...
    }
    elseif ($_param['notification'] === 'email')
    {
        //...
        //...
        //...
    }
    elseif ($_param['call_back'] === 'immediately')
    {
        //...
        //...
        //...
    }
    elseif ($_param['call_back'] === 'Monday')
    {
        //...
        //...
        //...
    }
}

PM MAIL   Вверх
baldina
Дата 6.11.2014, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 26
Всего: 101



Код

function name($_param)
{
    switch ($_param['notification'])
    {
        case 'sms':
          //...
          break;
        case 'email':
          //...
          break;
         default:
            switch ($_param['call_back']) {
                case 'immediately':
                   //...
                   break;
                case 'Monday':
                   //...
                   break;
            }
       }
}

заметьте, $_param['notification'] и $_param['call_back'] вычисляются лишь единожды
конечно не скажу, что это изящно, но есть и другие способы...

вы покажите конкретную задачу или её часть, тогда будет предметно.
PM MAIL   Вверх
_zorn_
Дата 6.11.2014, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 6
Всего: 12



Код

switch($_param['notification'])
{
  case 'sms':
    //...
  break;
  case 'email':
    //..
  break;
  default:
    switch($_param['call_back'])
    {
      case 'immediately':
        //...
      break;
      case 'Monday':
        //...
      break;
    }
}


Хы, почти слово в слово  smile 

Это сообщение отредактировал(а) _zorn_ - 6.11.2014, 11:19
PM MAIL   Вверх
maxipub
Дата 6.11.2014, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



Цитата(baldina @  6.11.2014,  11:16 Найти цитируемый пост)
заметьте, $_param['notification'] и $_param['call_back'] вычисляются лишь единожды

Не совсем понятно, как это облегчает чтение кода? Убирает if(...), добавляя case и break...

Цитата(baldina @  6.11.2014,  11:16 Найти цитируемый пост)
конечно не скажу, что это изящно, но есть и другие способы...

Ага... А если обрабатываемых параметров будет 10? smile Вы скажете что это неправильный подход к проектированию, лишь бы оправдать применение switch!? smile 

Цитата(baldina @  6.11.2014,  11:16 Найти цитируемый пост)
вы покажите конкретную задачу или её часть, тогда будет предметно. 

Я думаю, тут суть не столько в задаче, сколько в подходе. Я не стану использовать switch не при каких обстоятельствах.

Выбирать между разными СУБД или между СУБД и файлами - это требует знания конкретной задачи. A wsitch или if - это уже дело вкуса, ИМХО! smile 
PM MAIL   Вверх
SoWa
Дата 6.11.2014, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


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

Репутация: 6
Всего: 74



Не согласен про дело вкуса. Так же как выбор БД - это под конкретную задачу. Иначе патерны проектирования, объектно-ориентированный анализ и прочие прелести придумали теоретики от нефиг делать smile
И уже переходя к этой забавной задачке - ничего в примере ниже не смущает?
// Если доставить смс, иначе если доставить почтой, иначе если доставить в понедельник, иначе если доставить сейчас. А если доставить смской в понедельник? goto используете?  smile  smile  smile 
Код

<?php
    $a = 'foobar';
    $b = 'barbaz';

    if ($a == 'foobar') {
        echo 'foobar';
    }
    elseif ($b == 'barbaz') {
        echo 'barbaz';
    }
?>

Что выведется?

В общем, вопрос уже глубже, чем "какую конструкцию использовать". Я думаю у всех участников темы появляется вопрос - вы вообще представляете, что вам надо?


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
maxipub
Дата 6.11.2014, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



Цитата(SoWa @  6.11.2014,  12:02 Найти цитируемый пост)
Если доставить смс, иначе если доставить почтой, иначе если доставить в понедельник, иначе если доставить сейчас. А если доставить смской в понедельник?

Там не доставить сейчас или доставить в понедельник, а необходимость менеджеру перезвонить клиенту - сейчас или с понедельника. Смс и почта выполняются автоматически, звонки менеджера - человеком, это взаимоисключающие вещи в данном случае.

Добавлено через 5 минут и 10 секунд
Цитата(SoWa @  6.11.2014,  12:02 Найти цитируемый пост)
Не согласен про дело вкуса. Так же как выбор БД - это под конкретную задачу.

Ну это то же самое, что сказать что для города покупайте только седаны, а для села - только пикапы. Если я езжу по городу на внедорожнике, по-вашему, я уже не прав? smile  smile 
PM MAIL   Вверх
SoWa
Дата 6.11.2014, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


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

Репутация: 6
Всего: 74



Нет нет, я к тому, что вы знаете, что можно ездить на внедорожнике по городу, и знаете что говна месить на седане - не очень.
Так вот суть в том, что в программировании доступен любой "транспорт", и не очень разумно рассекать по городу на Toyota Surf с четырехлитровым турбодизелем.
В вашем понимании if/elseif - как раз такой внедорожник. Хардкорно. Можно сделать элегантнее, как Tesla.

А теперь предметно мое ИМХО(если вы не против слов "как сделал бы я". Если против - скижате, больше не буду).
1) Взаимоисключающие вещи в одном блоке кода - не круто. Разнести по разным методам. Например processNotification($_param['notification']) и processCallback($_param['callback'])
2) Не знаю как у вас сейчас в системе, но есть вероятность повторного использования кода в этих условиях. Соответственно выносим куски кода в методы notifyBySms, notifyByEmail, pushCallback
3) Просто на подумать, может понравится метод - вынести методы в HashTable. Примерно так:
Код

<?php
    function method1() {
        echo 'Method1';
    }

    $methodMap = array(
        'm1' => method1
    );
    $param = 'm1';
    $methodMap[$param]();
?>

Теперь вам не надо ни if, ни switch. Останется нарисовать только функцию отображения множества параметров в один параметр. Но это уже не круто тоже - совать туда разные куски логики )))


--------------------
Всем добра smile
PM MAIL 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.0701 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


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

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