Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
1

Почему участки кода со "switch-case" - это плохо и реплейсятся при рефакторинге?

20.12.2014, 00:34. Показов 6730. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Попалась мне статейка одна на Хабре, где давались рекомендации по грамотному написанию кода. Одним из пунктов в ней был отказ от использования switch-case? Естественно автор поленился объяснить и оставил меня в недоумении. Чем плох switch-case? Почему при рефакторинге его рекомендуется менять? Почему даже решарпер switch-case рекомендует менять такую конструкцию на кучу аналогичных if'ов?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2014, 00:34
Ответы с готовыми решениями:

Внутри участки кода. Прошу опытных сказать что это за вид языка
Здравствуйте!Я до сих пор мучаюсь какие бывают виды c++.вот наконец нашел такойразнообразный код и...

Как переделать это в switch-case? не понимаю эту конструкцию совсем
public static void KeyDown(Form form, KeyEventArgs key) { if (key.KeyCode ==...

Структура кода (допускается ли частое использование if - else и switch - case)
В свих программах, иногда, мне приходится прибегать к упомянутым конструкциям(if - else, switch -...

Почему switch case начал работать неправильно?
switch(T1) { case 1:...

Минимизации размера кода в типовой схеме с операторами switch / case
Здравствуйте! Для минимизации размера кода прошу помочь как сделать чтобы типовая схема с...

19
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
20.12.2014, 01:14 2
Цитата Сообщение от SLiTHER Посмотреть сообщение
Почему даже решарпер switch-case рекомендует менять такую конструкцию на кучу аналогичных if'ов?
что за бред...
где статья?

switch-case в ил коде выглядит как те-же ифы
0
4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
20.12.2014, 01:24  [ТС] 3
Цитата Сообщение от Metall_Version Посмотреть сообщение
что за бред...
где статья?
Пожалуйста: http://habrahabr.ru/post/169139/
Цитата Сообщение от Metall_Version Посмотреть сообщение
switch-case в ил коде выглядит как те-же ифы
Уж не знаю, как он там в IL выглядит. Разбираться в нем - это душевный онанизм. Я знаю одно: switch на неком псевдокоде можно преобразовывать как в кучу IF'oв, так и в конструкцию с таблицей переходов. Кстати где-то когда-то слышал, что старые компиляторы switch преобразовывали в IF'ы, а современные заменяют на конструкцию с таблицей переходов, которая работает гораздо быстрее.
0
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
20.12.2014, 01:28 4
SLiTHER,
Эта статья просто перечислений глав книги, указаных в самой статье. Книга гуглится очень просто, почитайте
0
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
20.12.2014, 01:36 5
SLiTHER, ан нет, оказывается в иле по разному выглядит. а ведь в я какой то книге читал обратное... мда доверяй но проверяй (это я про инфу которую получаешь из разных источников)
if
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
.locals init ([0] bool CS$4$0000)
  IL_0000:  nop
  IL_0001:  ldarg.0
  IL_0002:  ldc.i4.1
  IL_0003:  ceq
  IL_0005:  ldc.i4.0
  IL_0006:  ceq
  IL_0008:  stloc.0
  IL_0009:  ldloc.0
  IL_000a:  brtrue.s   IL_001b
  IL_000c:  nop
  IL_000d:  ldstr      "1"
  IL_0012:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_0017:  nop
  IL_0018:  nop
  IL_0019:  br.s       IL_004d
  IL_001b:  ldarg.0
  IL_001c:  ldc.i4.2
  IL_001d:  ceq
  IL_001f:  ldc.i4.0
  IL_0020:  ceq
  IL_0022:  stloc.0
  IL_0023:  ldloc.0
  IL_0024:  brtrue.s   IL_0035
  IL_0026:  nop
  IL_0027:  ldstr      "2"
  IL_002c:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_0031:  nop
  IL_0032:  nop
  IL_0033:  br.s       IL_004d
  IL_0035:  ldarg.0
  IL_0036:  ldc.i4.3
  IL_0037:  ceq
  IL_0039:  ldc.i4.0
  IL_003a:  ceq
  IL_003c:  stloc.0
  IL_003d:  ldloc.0
  IL_003e:  brtrue.s   IL_004d
  IL_0040:  nop
  IL_0041:  ldstr      "3"
  IL_0046:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_004b:  nop
  IL_004c:  nop
  IL_004d:  ret
} // end of method Program::Iff


switch
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
.locals init ([0] int32 CS$4$0000)
  IL_0000:  nop
  IL_0001:  ldarg.0
  IL_0002:  stloc.0
  IL_0003:  ldloc.0
  IL_0004:  ldc.i4.1
  IL_0005:  sub
  IL_0006:  switch     ( 
                        IL_0019,
                        IL_0026,
                        IL_0033)
  IL_0017:  br.s       IL_0040
  IL_0019:  ldstr      "1"
  IL_001e:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_0023:  nop
  IL_0024:  br.s       IL_0040
  IL_0026:  ldstr      "2"
  IL_002b:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_0030:  nop
  IL_0031:  br.s       IL_0040
  IL_0033:  ldstr      "3"
  IL_0038:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_003d:  nop
  IL_003e:  br.s       IL_0040
  IL_0040:  ret
} // end of method Program::Switch


метод свитч выглядит так
C#
1
2
3
4
5
6
7
8
9
10
11
12
static void Switch(int i)
        {
            switch (i)
            {
                case 1: Console.WriteLine("1");
                    break;
                case 2: Console.WriteLine("2");
                    break;
                case 3: Console.WriteLine("3");
                    break;
            }
        }
метод с ифами аналогично только на ифах.

как видим свитч в ИЛе короче выглядит, и применяется команда switch, что за команда хз , возможно и есть та более оптимальная таблица переходов. эксперты подскажут

Добавлено через 1 минуту
а по поводу решарпера не правда, когда это он рекомендует менять свитч на ифы?
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
20.12.2014, 06:53 6
Потому что так гораздо быстрее:
C++
1
ProcTables[i]();
Во всяком случае на плюсах. В шарпе насколько понимаю тоже должен быть аналог
0
4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
20.12.2014, 07:55  [ТС] 7
Цитата Сообщение от XRoy Посмотреть сообщение
Эта статья просто перечислений глав книги, указаных в самой статье. Книга гуглится очень просто, почитайте
Я предпочитаю тратить время в своей жизни по принципу "Овчинка должна стоить выделки". Мне проще потратить несколько минут, чтобы задать вопрос здесь и также быстро получить на него ответ, чем искать эту книгу, скачивать, читать нужную главу.
Цитата Сообщение от Metall_Version Посмотреть сообщение
как видим свитч в ИЛе короче выглядит, и применяется команда switch, что за команда хз , возможно и есть та более оптимальная таблица переходов. эксперты подскажут
Она родимая и есть.
Цитата Сообщение от Metall_Version Посмотреть сообщение
а по поводу решарпера не правда, когда это он рекомендует менять свитч на ифы?
У меня 9.0 стоит версия. Switch подчеркивает, слева иконку выводит и по Alt+Enter всегда предлагает заменить switch на if'ы.

Не по теме:

Да и вообще, ReSharper хоть и шикарная штука, но иногда все мое мировоззрение с ног на голову переворачивает. Вот меня, например, в универе учили, что если ты знаешь тип, то явно его и указывай, а ReSharper всегда предлагает явное указание типа на var менять. Учили, что всякие goto, break, continue - это ооооочень плохо и их не стоит использовать. А вот ReSharper конструкции с несколькими вложенными друг в друга if'ами всегда предлагает преобразовать в конструкцию с последовательно идущими if'ами и этими continue или break.
Например было:

C#
1
2
3
4
5
6
7
8
9
10
foreach (var someClass in classesList)
{
    if (someClass == typeof(requiredClass))
    {
        if (someClass.ID != null)
        {
            //do something
        }
    }
}
Решарпер предложит поменять на что-то подобное:
C#
1
2
3
4
5
6
7
8
foreach (var someClass in classesList)
{
    if (!(someClass == typeof(requiredClass)))
        continue;
    if (!(someClass.ID != null))
        continue;
    //do something
}



Добавлено через 3 минуты
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Потому что так гораздо быстрее
Как мы уже видели выше, компилятор switch преобразует в таблицу с переходами, которые так чисто на вид выполняются быстрее IF'а. Так вот и чем же тогда плох case?
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
20.12.2014, 08:23 8
Цитата Сообщение от SLiTHER Посмотреть сообщение
Как мы уже видели выше, компилятор switch преобразует в таблицу с переходами, которые так чисто на вид выполняются быстрее IF'а. Так вот и чем же тогда плох case?
А если таблица разрежена? ну не 1 2 3 а 1000 2000 3000? прийдется менять на ифы. если конечно у проца нет соответствующей инструкции. Но если даже и есть-то микропрограмма с ифами.

Добавлено через 16 минут

Не по теме:

Цитата Сообщение от SLiTHER Посмотреть сообщение
Учили, что всякие goto, break, continue - это ооооочень плохо и их не стоит использовать.
Это в каком ликбезе этому учат если не секрет? На блок-схемах линии чертить сразу туда куда надо учат, а в коде соответствие этим линиям нельзя использовать? Может в ASMe JMP или вообще JMx - тоже не использовать? кстати часто не хватает break n; чтобы выйти сразу из нескольких циклов, приходится goto лепить.

0
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
20.12.2014, 12:22 9
Цитата Сообщение от SLiTHER Посмотреть сообщение
Вот меня, например, в универе учили, что если ты знаешь тип, то явно его и указывай, а ReSharper всегда предлагает явное указание типа на var менять.
зачастую он норм подсказывает, насчет вара кому как нравится, в фирмах у всех стоит решарпер и инспектор каокйто и по ним пишут, только каждый решарпер по своему настраивает.. но за ним нужно следить бывает посоветует такое что на голову не натянешь.

Цитата Сообщение от SLiTHER Посмотреть сообщение
Учили, что всякие goto, break, continue - это ооооочень плохо и их не стоит использовать.
омг , кто вас так учил. как раз break и continue полезные команды, и без них часто нельзя выполнить задачу правильно...

Цитата Сообщение от SLiTHER Посмотреть сообщение
Решарпер предложит поменять на что-то подобное:
и это абсолютно правильно , зачем делать кучу вложенных ифоф?

в общем решарпер это не панацея и не эталон правильного кода , а лишь инструмент, и вполне хороший инструмент
0
4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
21.12.2014, 00:57  [ТС] 10
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А если таблица разрежена?
Такого быть не может. Будет у вас 10 кейсов, то десять записей в таблице с адресами перехода и будет.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Это в каком ликбезе этому учат если не секрет? На блок-схемах линии чертить сразу туда куда надо учат, а в коде соответствие этим линиям нельзя использовать? Может в ASMe JMP или вообще JMx - тоже не использовать? кстати часто не хватает break n; чтобы выйти сразу из нескольких циклов, приходится goto лепить.
Их величество преподаватели так говорили мне в свое время! Да и вообще, общеизвестный факт, что наличие в программе goto говорит о низком уровне программиста.
Вариант с ассемблером опустим. Там j**, call - это единственный способ передачи управления.
А по поводу break и continue. Опустим case - там они обязательная часть синтаксиса. Но во всех остальных случаях их использование мне всегда казалось необоснованным. Лично нас когда-то учили, что если вам нужно досрочно выйти из цикла например, то делать это надо по условию. Т.е. завести какой-нибудь флаг или переменную состояния и добавить ее в условие.
Цитата Сообщение от Metall_Version Посмотреть сообщение
но за ним нужно следить бывает посоветует такое что на голову не натянешь
Вот это точно
0
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
21.12.2014, 01:08 11
Цитата Сообщение от SLiTHER Посмотреть сообщение
Их величество преподаватели так говорили мне в свое время! Да и вообще, общеизвестный факт, что наличие в программе goto говорит о низком уровне программиста.
Вариант с ассемблером опустим. Там j**, call - это единственный способ передачи управления.
А по поводу break и continue. Опустим case - там они обязательная часть синтаксиса. Но во всех остальных случаях их использование мне всегда казалось необоснованным. Лично нас когда-то учили, что если вам нужно досрочно выйти из цикла например, то делать это надо по условию. Т.е. завести какой-нибудь флаг или переменную состояния и добавить ее в условие.
плохим привычкам вас преподаватели научили

Цитата Сообщение от SLiTHER Посмотреть сообщение
Т.е. завести какой-нибудь флаг или переменную состояния и добавить ее в условие.
ок есть условие выхода, а как выходить из цикла без break ?
а continue помогает избежать большой вложенности блоков кода с ИФом например (как советовал правильно решарпер) или просто досрочно перейти к следующему итератору

в общем без break и continue это как раз и есть
Цитата Сообщение от SLiTHER Посмотреть сообщение
говорит о низком уровне программиста.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.12.2014, 01:18 12
Цитата Сообщение от SLiTHER Посмотреть сообщение
Их величество преподаватели так говорили мне в свое время! Да и вообще, общеизвестный факт, что наличие в программе goto говорит о низком уровне программиста.
Вариант с ассемблером опустим. Там j**, call - это единственный способ передачи управления.
А по поводу break и continue. Опустим case - там они обязательная часть синтаксиса. Но во всех остальных случаях их использование мне всегда казалось необоснованным. Лично нас когда-то учили, что если вам нужно досрочно выйти из цикла например, то делать это надо по условию. Т.е. завести какой-нибудь флаг или переменную состояния и добавить ее в условие.
Почему goto плох думаю объяснять не стоит. break и continue тоже надо применять аккуратно. Хотя конечно же заводить отдельную переменную для флага это маразм. И да, решарпер не панацея.

Цитата Сообщение от SLiTHER Посмотреть сообщение
Я предпочитаю тратить время в своей жизни по принципу "Овчинка должна стоить выделки". Мне проще потратить несколько минут, чтобы задать вопрос здесь и также быстро получить на него ответ, чем искать эту книгу, скачивать, читать нужную главу.
а по какому принципу вам должны отвечать? В книге все расписано, смысл пересказывать её словами, тратя время других людей?
0
4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
21.12.2014, 01:51  [ТС] 13
Цитата Сообщение от Psilon Посмотреть сообщение
В книге все расписано, смысл пересказывать её словами, тратя время других людей?
Так устроен этот мир!
Одни делегируют, другие это исполняют (один из основных принципов тайм-менеджмента).
А еще - выживает сильнейшая и наиболее приспособленная особь (закон эволюции).
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.12.2014, 03:27 14
SLiTHER, то есть вы себя позиционируете с тз начальника, а другие форумчане - подчиненные? Ну удачи в поиске ответов с такой постановкой вопроса.
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
21.12.2014, 04:03 15
Цитата Сообщение от SLiTHER Посмотреть сообщение
Т.е. завести какой-нибудь флаг или переменную состояния и добавить ее в условие.
А ваши преподаватели когда ухо чешут тоже голову вокруг головы обматывают? У нас в ликбезе преподы по поводу этих флагов так и говорили - можно ухо вот так чесать(обматывая руку вокруг головы) а можно break поставить ну или continue или goto или чего там по смыслу. Ну преобразует компилятор эти ваши флаги еще в дополнительные CMP и Jxx и что? только машкод усложнит так же как и сырец. почему тогда хорошо использовать for() do() while() там же тоже есть goto, только неявное. Может еще и if-else не использовать? Тоже неявное goto есть. а switch() - так целый рассадник неявных goto(); про return я вообще молчу - тот же goto только адрес из стека. и вызов подпрограммы тоже goto. Вопрос - что тогда остается? Планкалюль? Так там тоже циклы и ветвления были. И у Бэбиджа тоже. Машина Паскаля разве что.
Вы бы в блок-сехме эти дополнительные флаги нарисовали и помотрели бы что тот же препод скадет по этому поводу.
1
4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
21.12.2014, 04:49  [ТС] 16
Цитата Сообщение от Psilon Посмотреть сообщение
то есть вы себя позиционируете с тз начальника, а другие форумчане - подчиненные? Ну удачи в поиске ответов с такой постановкой вопроса
Ну и что плохого?

В жизни такой подход к людям мне помогает добиваться результата! На текущем этапе моей жизни результат - главное для меня. А чувствуют люди себя потом использованными или нет, мне по большому счету все равно! Вас никто не заставляет здесь отвечать и вы делаете это по собственной воле. Просто потому, что вам нравится помогать людям, или нравится умничать, или сам процесс ответов нравится, или пообщаться хотите, или, или, или... У каждого своя мотивация. А значит добровольно соглашаетесь на то, что кто-то использует ваши знания для решения своих целей. Что же вы тогда обижаетесь, если сами на это подписались?
А вот к друзьям, близким и любимой женщине у меня иное отношение. Эти люди - важная часть моей жизни, поэтому их чувства я уважаю и их мнение всегда выслушаю.
Да и вообще, лично я стараюсь окружать себя людьми, подобными мне. Людьми, которые четко знают что хотят от жизни. Людьми, которые умеют ставить цели и добиваться их. Людьми амбициозными, властными, тщеславными. Людьми, являющимися по натуре волками, а не овцам. Людьми, не боящимися брать на себя ответственность.

Вот моей душе такие люди ближе! Именно за такими людьми народ пойдет куда угодно. Да собственно такие властные личности и управляют сейчас нашей страной. А с "рубаха-парнями" мне не по пути!

Разделяете вы мое мнение или нет - это ваше право! Я вас не сужу за ваше мнение и вы меня не судите за мое!

Добавлено через 15 минут
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А ваши преподаватели когда ухо чешут тоже голову вокруг головы обматывают? У нас в ликбезе преподы по поводу этих флагов так и говорили - можно ухо вот так чесать(обматывая руку вокруг головы) а можно break поставить ну или continue или goto или чего там по смыслу. Ну преобразует компилятор эти ваши флаги еще в дополнительные CMP и Jxx и что? только машкод усложнит так же как и сырец. почему тогда хорошо использовать for() do() while() там же тоже есть goto, только неявное. Может еще и if-else не использовать? Тоже неявное goto есть. а switch() - так целый рассадник неявных goto(); про return я вообще молчу - тот же goto только адрес из стека. и вызов подпрограммы тоже goto. Вопрос - что тогда остается? Планкалюль? Так там тоже циклы и ветвления были. И у Бэбиджа тоже. Машина Паскаля разве что.
Вы бы в блок-сехме эти дополнительные флаги нарисовали и помотрели бы что тот же препод скадет по этому поводу.
Что вы до меня-то докопались? Я лишь рассказал то, за что нас когда-то ругали в универе.
Но те времена давно прошли! Break, continue и return я как тогда использовал, так и сейчас использую. Вот попалась статейка на хабре, где говорят, что switch-case не айс - тоже проигнорирую и буду использовать дальше.
Ну а goto как не использовал никогда, так и не буду! Лично мое мнение, что любой, я подчеркну, ЛЮБОЙ код, в котором замечен оператор goto, должен автоматически размещаться на говнокод.ру! Не существует ситуации, в которой без goto нельзя было бы обойтись!

А по поводу переменных состояния и флагов вы не правы! В последнее время часто приходится что-то параллелить в проекте у нас. А если знакомы с многопоточным программированием, то знаете, что там на таких переменных и флагах все держится.
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
21.12.2014, 05:19 17
Цитата Сообщение от SLiTHER Посмотреть сообщение
А по поводу переменных состояния и флагов вы не правы! В последнее время часто приходится что-то параллелить в проекте у нас. А если знакомы с многопоточным программированием, то знаете, что там на таких переменных и флагах все держится.
Ну между флагом завершения параллельного процесса, и ненужным флагом для выхода из цикла.
Цитата Сообщение от SLiTHER Посмотреть сообщение
Что вы до меня-то докопались? Я лишь рассказал то, за что нас когда-то ругали в универе.
Да не докапывался я до вас. просто тоже рассказал что нам по поводу того же самого в ликбезе говорили. Прсосто удивительно, что эпедемия gotoфобии порожденная Виртом не просто расширяется, а и мутирует... уже на break и continue перекинулась как оказывается...
0
insite2012
21.12.2014, 05:19
  #18

Не по теме:

Цитата Сообщение от SLiTHER Посмотреть сообщение
В жизни такой подход к людям мне помогает добиваться результата
Не знаю как в жизни, но ятд, что на данном форуме такой подход вам только усложнит общение с коллегами. Если, конечно, вы не будете для каждого нового вопроса создавать новый ник.

0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
21.12.2014, 10:59 19
Цитата Сообщение от SLiTHER Посмотреть сообщение
Такого быть не может. Будет у вас 10 кейсов, то десять записей в таблице с адресами перехода и будет.
Кейсов то 10. Но если варианты выбора 1,2,3 к примеру - то выбор адреса из таблицы - эт запросто грубо говоря если к значению прибавить/отнять что нить чтобы получить валидный индекс в таблице адресов переходов. а если 1753,8693,14442 - т.е. ключи для выбора вообще никак не связанны с друг другом - то прийдется с каждым ключом сравнивать.

Добавлено через 16 минут
PS:вспомните лабораторки по ASM и как и каким способом, вы там реализовывали case в каждом из случаев.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.12.2014, 12:25 20

Не по теме:

Цитата Сообщение от insite2012 Посмотреть сообщение
Не знаю как в жизни, но ятд, что на данном форуме такой подход вам только усложнит общение с коллегами. Если, конечно, вы не будете для каждого нового вопроса создавать новый ник.
расслабься, когда-нибудь до него дойдет...



Цитата Сообщение от SLiTHER Посмотреть сообщение
В жизни такой подход к людям мне помогает добиваться результата! На текущем этапе моей жизни результат - главное для меня. А чувствуют люди себя потом использованными или нет, мне по большому счету все равно! Вас никто не заставляет здесь отвечать и вы делаете это по собственной воле. Просто потому, что вам нравится помогать людям, или нравится умничать, или сам процесс ответов нравится, или пообщаться хотите, или, или, или... У каждого своя мотивация. А значит добровольно соглашаетесь на то, что кто-то использует ваши знания для решения своих целей. Что же вы тогда обижаетесь, если сами на это подписались?
такой подход фигово позволяет добиваться результата. Любое общение есть манипуляция в своих интересах, только вот она намного успешнее, когда человек об этом не знает. Рассмотрим два варианта сдачи зачета "халявному преподу".

1. "Ну, я конечно, не ходил, потому что немного проболел, мне очень жаль, можно мне все-таки как-то получить этот зачет?"
2. "Здравствуйте. Я не ходил на лекции, потому что мне сказали, что вы нахаляву ставите оценки, так что вот зачетка, ставьте и я пошел, я с друганами уже заказал билеты на 5 часов".

посыл один и тот же, но угадайте, какой из них будет успешным. Или по-вашему другие люди идиоты и не делают ничего в своих целях? Этакое стадо альтруистов. Просто они используют принцип достаточности, когда нужно приложить 5% усилий для получения 95% результата, но человек даже их перекладывает на других, то таким людям трудно жить вне своей семьи, где их любят просто as is.

Впрочем, это не форум психологической помощи. Так что я просто отписываюсь и всё.
2
21.12.2014, 12:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2014, 12:25
Помогаю со студенческими работами здесь

Почему не может использоваться command в качестве case для switch?
Почему не может использоваться command в качестве case для switch? using System; using...

Почему указатели это плохо?
Вопрос на собеседовании был почему указатели это плохо из-за них получаются проблемы? Какой...

Помощь в рефакторинге кода
Есть приложение. Написано собственноручно, ГУИ на Swing, по кнопкам в отдельных потоках запускаются...

Подскажите, пожалуйста, почему в операторе switch-case подчёркивается красным razdelHCode...
Здравствуйте. Подскажите, пожалуйста, почему в операторе switch-case подчёркивается красным...

Switch-case: Не могу понять почему не весь код в методе возвращается
подскажите пожалуйста... Не могу понять почему пишет что не весь код в методе возвращается. Я...

Оптимальная конструкция switch-case-while / while-switch-case
Имеется конструкция типа: switch() { case 1: while() { ... }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru