Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> что лучше, c else или без 
:(
    Опции темы
neweraser
Дата 18.2.2010, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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




Код

if str = 'январь' then showmessage('1')
  else
    if str = 'февраль' then showmessage('2')
    else
      if str = 'март' then showmessage('3')
      else
        if str = 'апрель' then showmessage('4');
           ...


или

Код

if str = 'январь' then showmessage('1')
if str = 'февраль' then showmessage('2')
if str = 'март' then showmessage('3')
if str = 'апрель' then showmessage('4');

а?  smile 

вот это из справки делфи
Код

if I in [1..5] then
  Caption := 'Low'
  else if I in [6..10] then
    Caption := 'High'
    else if (I = 0) or (I in [10..99]) then
      Caption := 'Out of range'
      else
        Caption := '';


а мне вот кажется, что и без else можно прекрасно обойтись  smile 


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 18.2.2010, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი




Я за второй вариант, ибо наиболее логичный и понятый.
Цитата(neweraser @  18.2.2010,  18:36 Найти цитируемый пост)
Код

if str = 'январь' then showmessage('1')
if str = 'февраль' then showmessage('2')
if str = 'март' then showmessage('3')
if str = 'апрель' then showmessage('4');




--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
UniBomb
Дата 18.2.2010, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



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




neweraser, лучше case  smile 


--------------------
PM MAIL ICQ Skype   Вверх
kemiisto
Дата 18.2.2010, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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




Цитата(UniBomb @  18.2.2010,  19:51 Найти цитируемый пост)
neweraser, лучше case

UniBomb, в Delphi со строками, вроде, не работает.

Цитата(Данкинг @  18.2.2010,  19:51 Найти цитируемый пост)
Я за второй вариант, ибо наиболее логичный и понятый.

Нет. Первый. Что значит "логичный", "понятный"? Расшифруй.

Когда я пишу конструкцию типа №1 я уверен, что некая операция (showmessage, например) выполнится. И выполнится ровно 1 раз. Если правильно написать, конечно.

Тут ещё проблема в том, что форматирование нужно удачное выбирать.
Код

if I in [1..5] then
  Caption := 'Low'
else 
  if I in [6..10] then
    Caption := 'High'
  else 
    if (I = 0) or (I in [10..99]) then
      Caption := 'Out of range'
    else
        Caption := '';


А на самом деле - в Delphi "плохой" if. Он "паскалевский". С висячими else и без elsif. Хороший должен позволять писать сколько угодно веток elif/elsif/elseif. Ну и без висячих else, конечно же. smile  Они по-разному в разных языках пишутся.

Python
Код

if x < 0:
     x = 0
     print('Negative changed to zero')
elif x == 0:
     print('Zero')
elif x == 1:
     print('Single')
else:
     print('More')


Oberon-2
Код

IF (ch >= "A") & (ch <= "Z") THEN ReadIdentifier 
ELSIF (ch >= "0") & (ch <= "9") THEN ReadNumber 
ELSIF (ch = " ' ") OR (ch = ' " ') THEN ReadString 
ELSE SpecialCharacter 
END



--------------------
PM MAIL WWW GTalk Jabber   Вверх
Данкинг
Дата 18.2.2010, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი




Цитата(kemiisto @  18.2.2010,  19:14 Найти цитируемый пост)
Нет. Первый.

А в else не запутаешься? smile 

Цитата(kemiisto @  18.2.2010,  19:14 Найти цитируемый пост)
Что значит "логичный", "понятный"? Расшифруй.

Наглядный, скажем так. smile
 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
neweraser
Дата 18.2.2010, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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




Цитата(kemiisto @  18.2.2010,  19:14 Найти цитируемый пост)
в Delphi со строками, вроде, не работает

 smile пол часа пытался ))) даже топик создавать хотел
и я тоже за второй вариант, мне как-то так удобней и меньше кода, и так уже 1400 строчек  smile 


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
THandle
Дата 18.2.2010, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai




А ничо что второй вариант заставляет делать лишние проверки, что делает программу медленнее? (Кому интересно смотрим в CPU).
В данном случае не особо страшно... А если подобные проверки будут в большом цикле?

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


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград




  А еще лучше применить map<string,string>  smile . Т.е. карта сопоставлений ключа и значения.
Самое близкое из стандартного что есть в делфи это отсортированный TStringList . В результате задача превращается в 
Код

  StringList.Lines.Text := 'январь'#10'февраль'#10'март'...
  ShowMessage(IntToStr(StringList.IndexOf(str) + 1)); 

С логарифмическим временем поиска. Log2N где N число строк. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
A5uKa
Дата 18.2.2010, 22:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008




Код

        def str = "февраль";
        _=MessageBox.Show
        (
            match (str)
            {
                | "январь" => "1"
                | "февраль" => "2"
                | "март" => "3"
                | "апрель" => "4"
                | _ => "0"
            }
        );


pwnd  smile 
PM   Вверх
Utterson
Дата 19.2.2010, 14:37 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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




Цитата(THandle @  18.2.2010,  20:51 Найти цитируемый пост)
А ничо что второй вариант заставляет делать лишние проверки, что делает программу медленнее? (Кому интересно смотрим в CPU).
В данном случае не особо страшно... А если подобные проверки будут в большом цикле?

Спасибо, смеялся.  Наличие данных проверок не факт что на 386SX заметно будет. И это с отключенной оптимизацией.

Цитата(Alexeis @  18.2.2010,  21:16 Найти цитируемый пост)
 А еще лучше применить map<string,string> 

вот. 
PM MAIL   Вверх
Lazin
Дата 19.2.2010, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re




Код

let pwnd (str:string) =
    match str with
    | "январь" -> "1"
    | "февраль" -> "2"
    ...

MessageBox.Show(pwnd str)

PM MAIL Skype GTalk   Вверх
diadiavova
Дата 19.2.2010, 15:20 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


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




Lazin, это что удар фа-диезом по дельфям? smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Lazin
Дата 19.2.2010, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re




им самым

Добавлено через 32 секунды
почему подсветка для OCaml не работает?
PM MAIL Skype GTalk   Вверх
Oxy
Дата 19.2.2010, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 70
Регистрация: 20.9.2009




Код

function pwnd(str) {
    foo = {
        "январь": 1,
        "февраль": 2
       // ...
    };

    return foo[str];
}

alert(pwnd(str))

PM MAIL WWW   Вверх
A5uKa
Дата 19.2.2010, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008




Код

[>>+>+<<<-]>>>[<<<+>>>-]>+<<[-----[>]>>[<<<+++>>>[-]]

PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила раздела «Флейм»
Sneg0k

Добро пожаловать в «Флейм».

В разделе не действуют многие правила:

  • Можно оффтопить(умеренно)
  • Можно общаться на темы, не только связанные с программированием.

Строго запрещено:

  • Размещать рекламу
  • Обсуждать политику
  • Оскорблять друг-друга и переходить на личности
  • Наезжать, провоцировать других участников форума
  • Материться
  • Троллить

Напоминаем о существовании волшебной кнопочки "Репорт". Если вы увидели сообщение, несовместимое с жизнью, просьба подвести на нее курсор и клацнуть левой клавишей мышки. Тем самым вы сможете призвать злого, но жутко справедливого джина-модератора, который нашлет порчу на злостного нарушителя. Кстати - счётчик сообщений здесь не растёт.


Глас Винграда:


Глас Философии:


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k

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


 




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


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

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