Необычный цикл
От: trump-card Россия n/a
Дата: 18.05.06 03:25
Оценка: 11 (4) :))) :))) :))) :))) :))) :))) :))) :))) :))
Онаружил такой код в чужой компоненте:

  for(j = 0; j < 3; j++)
  {
    switch(j)
    {
       case 0:
             // Действие 1
             break;
       case 1:
             // Действие 2
             break;
       case 2:
             // Действие 3
             break;
    }
  }
Re: Необычный цикл
От: PPA Россия http://flylinkdc.blogspot.com/
Дата: 18.05.06 04:52
Оценка:
Здравствуйте, trump-card, Вы писали:

TC>Онаружил такой код в чужой компоненте:


Когда в компоненте это еще ничего
Вот как умеют использовать циклы программисты из Oracle:

  for c1 in (select x_seq.nextval nv from dual) loop
      :new.f1_id := c1.nv;
  end loop;


p.s.
В Oracle в таблице dual _всегда_ одна запись!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Необычный цикл
От: Блудов Павел Россия  
Дата: 18.05.06 05:11
Оценка: +1
Здравствуйте, PPA, Вы писали:

PPA>Вот как умеют использовать циклы программисты из Oracle:


PPA>
PPA>  for c1 in (select x_seq.nextval nv from dual) loop
PPA>      :new.f1_id := c1.nv;
PPA>  end loop;
PPA>


PPA>p.s.

PPA> В Oracle в таблице dual _всегда_ одна запись!

Мимо кассы. В x_seq.nextval, скорее всего одна запись — если это последовательность. Что из приведённого очевидно, но не доказано.
А в SELECT ... FROM DUAL будет столько записай, сколько нужно. Например, если x_seq.nextval это функция, возвращающая массив.
... << RSDN@Home 1.2.0 alpha rev. 642>>
Re: Необычный цикл
От: Sonic  
Дата: 18.05.06 08:05
Оценка:
Здравствуйте, trump-card, Вы писали:

Был реальный случай, по фирме в рассылке ходил этот перл

int i = 2;

if ( i == 1 )
.........
if ( i == 2 )
.........

между обьявлением переменной и if-ом ничего не было.
Re: Необычный цикл
От: ZevS Россия  
Дата: 18.05.06 08:15
Оценка: 1 (1) :))
И что б совсем здорово было —

  for(j = 0; j < 4; j++)
  {
    switch(j)
    {
       case 0:
             // Действие 1
             break;
       case 1:
             // Действие 2
             break;
       case 2:
             // Действие 3
             break;

      default:
            // Действие 4
    }
  }



Re: Необычный цикл
От: VsevolodC Россия  
Дата: 18.05.06 08:21
Оценка: :))) :)
комментарии вводят в заблуждение...
очевидно, что должно быть так:
  for(j = 0; j < 3; j++)
  {
    switch(j)
    {
       case 0:
             // Действие 0
            break;
       case 1:
             // Действие 1
             break;
       case 2:
             // Действие 2
             break;
    }
  }
Re[2]: Необычный цикл
От: ekamaloff Великобритания  
Дата: 18.05.06 08:23
Оценка:
Здравствуйте, ZevS, Вы писали:

Нифига, пропала проверка на тройку (смотрим границы цикла):

ZS>
ZS>  for(j = 0; j < 4; j++)
ZS>  {
ZS>    switch(j)
ZS>    {
ZS>       case 0:
ZS>             // Действие 1
ZS>             break;
ZS>       case 1:
ZS>             // Действие 2
ZS>             break;
ZS>       case 2:
ZS>             // Действие 3
ZS>             break;
ZS>       case 3:
ZS>             // Действие 4
ZS>             break;
ZS>       default:
ZS>             // Действие по умолчанию
ZS>    }
ZS>  }
ZS>


Но нормальный программист конечно сократит до такого:

for(j = 0; j < 4; ++j) // Помним, что в некоторых случаях префиксная форма эффективней!! :)))))
{
    switch(j)
    {
        case 0:
        case 1:
        case 2:
        case 3:
        default:
            break;
    }
}


Мы то не лыком шиты
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[2]: Необычный цикл
От: Аноним  
Дата: 18.05.06 08:39
Оценка:
Здравствуйте, Sonic, Вы писали:

S>Здравствуйте, trump-card, Вы писали:


S>Был реальный случай, по фирме в рассылке ходил этот перл


S>int i = 2;


S>if ( i == 1 )

S> .........
S>if ( i == 2 )
S> .........

S>между обьявлением переменной и if-ом ничего не было.


По-моему это просто вариант conditional compilation
Re[2]: Необычный цикл
От: crashed США  
Дата: 18.05.06 08:42
Оценка:
Здравствуйте, Sonic, Вы писали:

а ведь для избавления от прикола достаточно было написать
static int i = 2;
... << RSDN@Home 1.2.0 alpha rev. 648>>
Re: Необычный цикл
От: Аноним  
Дата: 18.05.06 09:06
Оценка:
Здравствуйте, trump-card, Вы писали:

Хм. Я бывает тоже пишу такие циклы, но примерно в таком контексте, если грубо и упрощенно:


ParentClass * cl = NULL;

for (int i = 0; i < 4; i++)
{
    switch (i)
    {
    case 0:
        cl = m_pChild0;
        break;
    case 1:
        cl = m_pChild1;
        break;
    case 2:
        cl = m_pChild2;
        break;
    case 3:
        cl = m_pChild3;
        break;

    cl->Operation (...);
}


Re[2]: Необычный цикл
От: Аноним  
Дата: 18.05.06 09:20
Оценка: +2
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, trump-card, Вы писали:


А>Хм. Я бывает тоже пишу такие циклы, но примерно в таком контексте, если грубо и упрощенно:


А>

А>ParentClass * cl = NULL;

А>for (int i = 0; i < 4; i++)
А>{
А>    switch (i)
А>    {
А>    case 0:
А>        cl = m_pChild0;
А>        break;
А>    case 1:
А>        cl = m_pChild1;
А>        break;
А>    case 2:
А>        cl = m_pChild2;
А>        break;
А>    case 3:
А>        cl = m_pChild3;
А>        break;

    cl->>Operation (...);
А>}
А>


А>


А не проще написать так:
m_pChild0->Operation (...);
m_pChild1->Operation (...);
m_pChild2->Operation (...);
m_pChild3->Operation (...); ?

Или уж так:
ParentClass *cl[4] = {m_pChild0, m_pChild1, m_pChild2, m_pChild3};
for( int i=0; i<4; i++ )
cl[i]->peration (...);

Не лень же такие конструкции ваять...
Re[2]: Необычный цикл
От: yevgeny.savenko  
Дата: 18.05.06 09:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, trump-card, Вы писали:


А>Хм. Я бывает тоже пишу такие циклы, но примерно в таком контексте, если грубо и упрощенно:


А>

А>ParentClass * cl = NULL;

А>for (int i = 0; i < 4; i++)
А>{
А>    switch (i)
А>    {
А>    case 0:
А>        cl = m_pChild0;
А>        break;
А>    case 1:
А>        cl = m_pChild1;
А>        break;
А>    case 2:
А>        cl = m_pChild2;
А>        break;
А>    case 3:
А>        cl = m_pChild3;
А>        break;

    cl->>Operation (...);
А>}
А>


А>


а чем хуже
m_pChild0->Operation (...);
m_pChild1->Operation (...);
m_pChild2->Operation (...);
m_pChild3->Operation (...); ????

ну или на крайняк, если те надо твой пейреннт между твоими строками
ParentClass * cl = NULL;
(cl = m_pChild0)->Operation (...);
(cl = m_pChild1)->Operation (...);
(cl = m_pChild2)->Operation (...);
(cl = m_pChild3)->Operation (...); ????

то вы не писали под тормозные девайсы =))) с ограниченым размером классов
попробуйде j2me
Re[3]: Необычный цикл
От: ZevS Россия  
Дата: 18.05.06 09:25
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>Здравствуйте, ZevS, Вы писали:


E>Нифига, пропала проверка на тройку (смотрим границы цикла):


Дык в том-то и дело!
Re[3]: Необычный цикл
От: Аноним  
Дата: 18.05.06 09:33
Оценка:
Здравствуйте, yevgeny.savenko, Вы писали:

YS>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, trump-card, Вы писали:


А>>Хм. Я бывает тоже пишу такие циклы, но примерно в таком контексте, если грубо и упрощенно:


А>>

А>>ParentClass * cl = NULL;

А>>for (int i = 0; i < 4; i++)
А>>{
А>>    switch (i)
А>>    {
А>>    case 0:
А>>        cl = m_pChild0;
А>>        break;
А>>    case 1:
А>>        cl = m_pChild1;
А>>        break;
А>>    case 2:
А>>        cl = m_pChild2;
А>>        break;
А>>    case 3:
А>>        cl = m_pChild3;
А>>        break;

    cl->>>Operation (...);
А>>}
А>>


А>>


YS>а чем хуже

YS>m_pChild0->Operation (...);
YS>m_pChild1->Operation (...);
YS>m_pChild2->Operation (...);
YS>m_pChild3->Operation (...); ????

YS>ну или на крайняк, если те надо твой пейреннт между твоими строками

YS>ParentClass * cl = NULL;
YS>(cl = m_pChild0)->Operation (...);
YS>(cl = m_pChild1)->Operation (...);
YS>(cl = m_pChild2)->Operation (...);
YS>(cl = m_pChild3)->Operation (...); ????

YS>то вы не писали под тормозные девайсы =))) с ограниченым размером классов

YS>попробуйде j2me

Ну дык обычно ради одного вызова функции такого не делаю, конечно. Просто Operation () — это обычно строк десять кода минимум.
А вот вариант
ParentClass *cl[4] = {m_pChild0, m_pChild1, m_pChild2, m_pChild3};
for( int i=0; i<4; i++ )
cl[i]->peration (...);
дествительно лучше смотрится. Че то мне массивы в голову не приходили
Re[4]: Необычный цикл
От: ZevS Россия  
Дата: 18.05.06 09:37
Оценка:
Здравствуйте, Аноним, Вы писали:
...

А>Ну дык обычно ради одного вызова функции такого не делаю, конечно. Просто Operation () — это обычно строк десять кода минимум.

А>А вот вариант
А>ParentClass *cl[4] = {m_pChild0, m_pChild1, m_pChild2, m_pChild3};
А>for( int i=0; i<4; i++ )
А>cl[i]->peration (...);
А>дествительно лучше смотрится. Че то мне массивы в голову не приходили

А произвести функциональную декомпозицию в голову не приходило?
Re: Необычный цикл
От: Symon Россия  
Дата: 18.05.06 09:41
Оценка:
А не проще ли написать:


// Действие 1
.......
// Действие 2
.......
// Действие 3
.......
Re[5]: Необычный цикл
От: Аноним  
Дата: 18.05.06 09:58
Оценка: :))
Здравствуйте, ZevS, Вы писали:

ZS>Здравствуйте, Аноним, Вы писали:

ZS>...

А>>Ну дык обычно ради одного вызова функции такого не делаю, конечно. Просто Operation () — это обычно строк десять кода минимум.

А>>А вот вариант
А>>ParentClass *cl[4] = {m_pChild0, m_pChild1, m_pChild2, m_pChild3};
А>>for( int i=0; i<4; i++ )
А>>cl[i]->peration (...);
А>>дествительно лучше смотрится. Че то мне массивы в голову не приходили

ZS>А произвести функциональную декомпозицию в голову не приходило?



похоже, что нет
и... а что это такое? Что то у меня с терминологией...
Re: Необычный цикл
От: Centaur Россия  
Дата: 18.05.06 10:11
Оценка:
Здравствуйте, trump-card, Вы писали:

TC>Онаружил такой код в чужой компоненте:


TC>
TC>  for(j = 0; j < 3; j++)
TC>  {
TC>    switch(j)
TC>    {
TC>       case 0:
TC>             // Действие 1
TC>             break;
TC>       case 1:
TC>             // Действие 2
TC>             break;
TC>       case 2:
TC>             // Действие 3
TC>             break;
TC>    }
TC>  }
TC>


Ну так это идиома for/switch, хорошо известная читателям сайта TheDailyWTF
Re: Необычный цикл
От: Аноним  
Дата: 18.05.06 10:24
Оценка:
Когда то видел код из школьных олимпиад по информатике, долго смеялись с учительницей вместе.
for i := 1 to n do
if i = k do begin
end;

переменная k нигде в программе не изменялась после инициализации.
Re[6]: Необычный цикл
От: ZevS Россия  
Дата: 18.05.06 11:20
Оценка:
Здравствуйте, Аноним, Вы писали:

...

ZS>>А произвести функциональную декомпозицию в голову не приходило?


А>

А>похоже, что нет
А>и... а что это такое? Что то у меня с терминологией...

Это шутка?

здесь
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.