Здравствуйте, 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 это функция, возвращающая массив.
Нифига, пропала проверка на тройку (смотрим границы цикла):
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
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, 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 (...);
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, 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
Здравствуйте, 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 (...);
дествительно лучше смотрится. Че то мне массивы в голову не приходили
Здравствуйте, Аноним, Вы писали:
...
А>Ну дык обычно ради одного вызова функции такого не делаю, конечно. Просто Operation () — это обычно строк десять кода минимум. А>А вот вариант А>ParentClass *cl[4] = {m_pChild0, m_pChild1, m_pChild2, m_pChild3}; А>for( int i=0; i<4; i++ ) А>cl[i]->peration (...); А>дествительно лучше смотрится. Че то мне массивы в голову не приходили
А произвести функциональную декомпозицию в голову не приходило?
// Действие 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>А произвести функциональную декомпозицию в голову не приходило?
похоже, что нет
и... а что это такое? Что то у меня с терминологией...
Здравствуйте, Sonic, Вы писали:
S>Здравствуйте, trump-card, Вы писали:
S>Был реальный случай, по фирме в рассылке ходил этот перл
S>int i = 2;
S>if ( i == 1 ) S> ......... S>if ( i == 2 ) S> .........
S>между обьявлением переменной и if-ом ничего не было.
Можно предволожить, что это хреново реализованная опция компиляции (то есть перед компиляцией меняешь число — и получаешь другую логику)
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Здравствуйте, Аноним, Вы писали:
А>А вот вариант А>ParentClass *cl[4] = {m_pChild0, m_pChild1, m_pChild2, m_pChild3}; А>for( int i=0; i<4; i++ ) А>cl[i]->peration (...); А>дествительно лучше смотрится. Че то мне массивы в голову не приходили
Ну и для полноты картины, в случае C++ используем такою конструкцию
for ( int i = 0; i < sizeof ( cl ) / sizeof ( cl [ 0 ] ); i++ )
cl[ i ]->operation ( ... );
И сколько надо, столько и добавляем Child'ов в массив.
Здравствуйте, serge_levin, Вы писали:
_>Здравствуйте, Аноним, Вы писали:
А>>А вот вариант А>>ParentClass *cl[4] = {m_pChild0, m_pChild1, m_pChild2, m_pChild3}; А>>for( int i=0; i<4; i++ ) А>>cl[i]->peration (...); А>>дествительно лучше смотрится. Че то мне массивы в голову не приходили
_>Ну и для полноты картины, в случае C++ используем такою конструкцию
_>for ( int i = 0; i < sizeof ( cl ) / sizeof ( cl [ 0 ] ); i++ ) _> cl[ i ]->operation ( ... );
_>И сколько надо, столько и добавляем Child'ов в массив.
У меня давно сложилось впечатление что большинство Си-шников страдают манией превращения простых, удобочитаемых текстов программ в некие подобия математических формул повышенной "закрученности", благо средства языка позволяют. А, скажем, месяца через два приходится доооолго смотреть в 1-2 строчки "упакованного" кода и вспоминать: Что я хотел "ЭТИМ" сказать/сделать?
Здравствуйте, Eugeny__, Вы писали:
S>>int i = 2;
S>>if ( i == 1 ) S>> ......... S>>if ( i == 2 ) S>> .........
E__>Можно предволожить, что это хреново реализованная опция компиляции (то есть перед компиляцией меняешь число — и получаешь другую логику)
Можно предположить, что в первом if недописанный код. Видел такое в реальном проекте. Был замысел вызывать одну функцию с разными параметрами из двух пунктов меню. Второй режим до конца реализован еще не был, и для релиза временно была вставлена строчка с принудительной записью значения первого режима в переменную.
AW>У меня давно сложилось впечатление что большинство Си-шников страдают манией превращения простых, удобочитаемых текстов программ в некие подобия математических формул повышенной "закрученности", благо средства языка позволяют. А, скажем, месяца через два приходится доооолго смотреть в 1-2 строчки "упакованного" кода и вспоминать: Что я хотел "ЭТИМ" сказать/сделать?
Нет, просто "Си-шники" за изящество и поэтому их сложно понять VB-программистам. Или Вы не VB-программист или просто уже не помните, что хотели этим сказать?
Здравствуйте, Блудов Павел, Вы писали: PPA>> В Oracle в таблице dual _всегда_ одна запись!
БП>Мимо кассы. В x_seq.nextval, скорее всего одна запись — если это последовательность.
Естесвенно, что это последовательность
БП> Что из приведённого очевидно, но не доказано. БП>А в SELECT ... FROM DUAL будет столько записай, сколько нужно. Например, если x_seq.nextval это функция, возвращающая массив.
выборка из dual без where (или connect by) всегда вертает 1 запись.
...а функции возвращающие массив в оракле зовутся не так
выборка должна быть вида:
select * from TABLE(cast(F(1) as T_X))
Здравствуйте, 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>
ИМХО: ели внутри Действие n переманная j изменяется, то это смахивает на автомат для распознования регулярных выражений в котором состояния в большенстве случаев увеличивается на один. Автор был порядочым леньтяем и изврощенсом.
Здравствуйте, U-4X-96, Вы писали:
U49>Здравствуйте, 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>>
U49>ИМХО: ели внутри Действие n переманная j изменяется, то это смахивает на автомат для распознования регулярных выражений в котором состояния в большенстве случаев увеличивается на один. Автор был порядочым леньтяем и изврощенсом.
U49>
Я тоже подумал об этом.
Если j меняется (а меняться оно имеет право как угодно), то такой цикл вполне оправдан.