- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
private void аффинныйШифрToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form childForm in MdiChildren)
{
childForm.Close();
}
foreach (Form f in this.MdiChildren)
{
return;
}
Affiniy af = new Affiniy();
af.TopLevel = false;
af.Show();
tabPage1.Controls.Add(af);
af.WindowState = System.Windows.Forms.FormWindowState.Maximized;
}
Попросили посмотреть код. 15 методов с различными простейшими шифрами, но чудо foreach -> return, присутствует в каждом. И не лень кому-то было...
Konardo 26.02.2014 12:07 # −8
TarasB 26.02.2014 14:35 # +2
Konardo 26.02.2014 14:53 # −2
MoN 26.02.2014 12:07 # −1
tabPage1.Controls.Add(af);
случайно был найден аналог MDI
Konardo 26.02.2014 12:08 # −8
bormand 26.02.2014 12:56 # +2
Автор пришел из мира SQL :)
roman-kashitsyn 26.02.2014 14:37 # +1
bormand 26.02.2014 14:45 # 0
А форич с ретурном это стандартная идиома в хранимках...
defecate-plusplus 27.02.2014 10:17 # 0
bormand 27.02.2014 10:38 # 0
defecate-plusplus 27.02.2014 10:55 # 0
btw, стрёмные ассоциации - return next означает отложенный возврат текущей строки курсора
вроде ж субд без блядского 100 летнего багажа, неужели нельзя было адекватное слово подобрать, чтобы не приходилось в хелп лезть
и да, зачем так держаться за единственную точку выхода из функции?
bormand 27.02.2014 11:14 # 0
А в оракле так не делают?
> стрёмные ассоциации
Ну да, согласен, next там вообще не в тему.
> зачем так держаться за единственную точку выхода из функции?
Хм, return где угодно можно сделать, единственная точка выхода не требуется.
defecate-plusplus 27.02.2014 11:19 # 0
return next? нет, не видел
сделал return foobar; и всего делов
как и в любом другом языке, когда логика требует выхода из подпрограммы, а ты находишься в цикле
bormand 27.02.2014 11:30 # 0
Ну и в слонике если написать return foobar, то он вернет этот foobar и процедура закончится.
> сделал return foobar; и всего делов
Но ведь это вернет одну строку. А если надо, чтобы процедура вернула курсор много строк?
defecate-plusplus 27.02.2014 11:48 # +1
ещё есть вариант вернуть коллекцию
а ещё есть pipelined functions вместо того, чтобы оперировать подрезультатами целиком
ещё можно включить голову и избавиться от pl/sql вообще - есть куча аналитических функций, всякие партишены и moving window - и наверняка будет быстрее, чем переключать контекст из sql в pl/sql
DBdev 27.02.2014 11:14 # +2
3.14159265 27.02.2014 11:17 # +3
bormand 27.02.2014 11:33 # 0
defecate-plusplus 27.02.2014 11:49 # 0
roman-kashitsyn 27.02.2014 11:56 # 0
defecate-plusplus 27.02.2014 11:58 # +2
очень ценная вещь, а приходится реализовывать через жопу, в 2014-то году
в оракле - приходится инициализировать и юзать переменные, объявленные в пакете
bormand 27.02.2014 12:20 # 0
В постгресе можно накостылить той фигней, которую я показывал выше, через return next в foreach ну или через return query...
Правда хер бы знал, как это скажется на производительности...
defecate-plusplus 27.02.2014 12:28 # +1
фактически, получалось гораздо медленнее, чем джойнить невъебенные таблицы с индексами
оптимизатор свое дело знает
pipelined, видать, нужно только действительно, когда надо строить длинный параллелизуемый конвейер из таких функций
bormand 27.02.2014 12:07 # 0
Примерно вот такое: Оно, конечно, вполне решается через select-from-select, или select-from-херня-описанная-в-with, но читается ужасно ;(
defecate-plusplus 27.02.2014 12:19 # +1
и раз ты выносишь в результат то же самое (или, возможно, почти то же самое), что происходит в подзапросе, я бы тупо джойнил, делал очевидные where и так получал всё, что нужно, написав длинный непонятный подзапрос единожды
bormand 27.02.2014 12:32 # 0
Само собой.
> я бы тупо джойнил
А это вариант... спасибо... я над этим подумаю. В having'е условия будут хоть и копипастные, но простенькие и понятные...
Правда если этот some long shit содержит case, то жопа остается ;(
Konardo 27.02.2014 12:35 # −2
bormand 27.02.2014 12:36 # +3
Konardo 27.02.2014 13:32 # −2
Потом с леденящим ужасом будешь вспоминать дни, когда ты программировал на системных языках.
DBdev 27.02.2014 13:37 # +1
> x,
> (select some long shit from foo where some cond) as y,
> (select another long shit from foo where some cond) as z
>from
> bar
Фу-фу-фу так делать. Дефекейстра дело говорит с джоинами.
bormand 27.02.2014 13:43 # 0
bormand 27.02.2014 11:47 # 0
Ну тогда остается только тащить всю мало-мальски нетривиальную логику в приложение ;(
DBdev 27.02.2014 13:39 # +2
Дык, так и надо. Пусть база данных останется тихим и уютным хранилищем.
defecate-plusplus 27.02.2014 14:11 # +1
absolut 27.02.2014 15:31 # +2
>DBdev
какой-то ленивый разработчик БД
DBdev 27.02.2014 20:00 # +3
Не ленивый, а open-minded.
Слишком много я повидал говна, которое пытались запихнуть на сторону БД.
Вы даже не представляете с каким огромным удовольствием я реализовываю логику на application level, вместо запихивания всего этого в БД.
Разве это похоже на пчёлы против мёда?
Lure Of Chaos 26.02.2014 21:39 # +1
cyperh 26.02.2014 23:53 # +3
bormand 27.02.2014 06:23 # +2
laMer007 27.02.2014 09:43 # +1
bormand 27.02.2014 10:12 # 0
absolut 27.02.2014 15:39 # −1