Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Результаты опроса: Нравится ли Гото, используете ли вы его
Да 21 37.50%
Нет 35 62.50%
Голосовавшие: 56. Вы ещё не голосовали в этом опросе

 
 
Рейтинг 5.00/43: Рейтинг темы: голосов - 43, средняя оценка - 5.00
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
1

Хороший или плохой тон программирования

28.03.2010, 13:42. Просмотров 7786. Ответов 49
Метки нет (Все метки)


вот в книгах читаю что гото туфта полная..на форуме тоже так говорят,а почему?очень нужная вещь,иногда лучше использовать это чем циклы
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2010, 13:42
Ответы с готовыми решениями:

"Ляпы" в программе. Хороший стиль программирования
Здравствуйте, уважаемые форумчане! Я на счет хорошего стиля программирования. Сделал...

TCHAR + float != дружба или плохой wsprintf
вот столкнулся с проблемой перевода float числа в строчку и наоборот: TCHAR milage;...

Объединять классы и внешние функции в одной программе плохой тон программирования?
Доброго времени суток! Преподаватель в институте задал определённую задачу, однако не определил...

Хороший тон программирования
Можно ли считать хорошим тоном в программировании? Например вот такой вот код? #define FOR...

49
Эксперт С++
2919 / 1268 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
28.03.2010, 14:06 2
Подходи к чтению книг и форуму без фанатизма.....
0
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
28.03.2010, 14:25  [ТС] 3
хорошо
0
Эксперт JavaЭксперт С++
8365 / 3586 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
28.03.2010, 14:30 4
МедведЪ, но также подходи без фанатизма к использованию goto. Это не плохо, но всему есть свое назначение, поэтому не стоит его во всех случаях без разбора применять
0
1258 / 796 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
28.03.2010, 15:43 5
МедведЪ:
goto можно использовать для выхода из сильно вложенных циклов: вниз по тексту: если необходимо.
Не один оператор кроме goto не позволит выйти из всех объемлющих циклов: вниз по тексту.
0
Evg
Эксперт CАвтор FAQ
21153 / 8169 / 628
Регистрация: 30.03.2009
Сообщений: 22,468
Записей в блоге: 30
28.03.2010, 16:10 6
Если goto упрощает структуру программы и делает её более понятной для чтения - то его нужно использовать, потому как написание кода "принципиально" без goto зачастую делает его (код) непонимаемым
0
372 / 286 / 97
Регистрация: 17.12.2009
Сообщений: 567
28.03.2010, 16:26 7
вот хороший пример с http://govnokod.ru/, откуда конкретно не знаю, потерял ссылку.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int p,k,l,i,j,d,q,R,t,r;
  S1:    s=0; p=1;
  S2:    if (s==0) { i=1; j=n; k=n; l=2*n+1; }
         if (s==1) { i=n+1; j=2*n; k=0; l=n+1; }
         d=1; q=p; r=p;
  S3:    if (x[i]>K>x[j]->K) goto S8;
  S4:    k=k+d; x[k]=x[i]; c[k]=c[i];
  S5:    i+=1; q-=1; if (q>0) goto S3;
  S6:    k+=d; if (k==l) goto S13; else x[k]=x[j];c[k]=c[j];
  S7:    j-=1; r-=1; if (r>0) goto S6; else goto S12;
  S8:    k+=d; x[k]=x[j]; c[k]=c[j];
  S9:    j-=1; r-=1; if (r>0) goto S3;
  S10:   k+=d; if (k==l) goto S13; else x[k]=x[i];c[k]=c[i];
  S11:   i+=1; q-=1; if (q>0) goto S10;
  S12:   q=p; r=p; d=-d; t=k; k=l; l=t; if (j-i<p) goto S10; else goto S3;
  S13:   p+=p; if (p<n) { s=1-s; goto S2; }
         if (s==0) for (t=1; t<=n; t+=1) { x[t]=x[t+n];c[t]=c[t+n] }
 
//Вот такой вариант сортировки предложен в одной известной книге. Оно работает...
и только не спрашивайте меня что это за книжка. Там в коментах так и не добились этого ответа, но все равно очевидно, что тут все слишком запутано.
0
Evg
Эксперт CАвтор FAQ
21153 / 8169 / 628
Регистрация: 30.03.2009
Сообщений: 22,468
Записей в блоге: 30
28.03.2010, 16:44 8
Цитата Сообщение от Aye Aye Посмотреть сообщение
но все равно очевидно, что тут все слишком запутано.
Смахивает на результат конвертации из ассемблера в Си
0
372 / 286 / 97
Регистрация: 17.12.2009
Сообщений: 567
28.03.2010, 17:53 9
Evg, возмоэно так и есть! Там на гвнокоде.ру кто то говорил про конвертацию с Фортрана... ))) вобщем точно что то переведено на Си. И кстати не пойму, как проверить корректность этого кода... наверно некоторые обьявления не указаны может и автор поста опечатался когда набивал код с учебника (например переменная R нигде не используется)... ну вобщем не важно ))))
0
Evg
Эксперт CАвтор FAQ
21153 / 8169 / 628
Регистрация: 30.03.2009
Сообщений: 22,468
Записей в блоге: 30
28.03.2010, 18:26 10
Цитата Сообщение от Aye Aye Посмотреть сообщение
Там на гвнокоде.ру кто то говорил про конвертацию с Фортрана
Запросто. Многие компиляторы с языков, отличного от Си, работают через конвертацию из языка в Си (либо на уровне текстового фала, либо на уровне промежуточного представления). Си++, Паскаль, Фортран - всё это легко конвертируется в Си. В результате и получается такой код, истыканный конструкциями goto. Если посмотреть результат работы утилит типа lex, yacc, bison - на выходе они тоже генерят код Си, в котором тьма-тьмущая операторов goto
0
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
28.03.2010, 20:57  [ТС] 11
вот прочитал выше на счет циклов
Aye Aye, это и вправду гавно код...я не говорил что в таких случаях надо использовать его..я использую гото в очень очень очень маленьких циклах....и редко НО использую...
0
Day
1171 / 981 / 83
Регистрация: 29.10.2009
Сообщений: 1,386
29.03.2010, 09:41 12
Тут два вопроса.
Нравится - Нет, не нравится.
Использую ли - Да. использую
Если структура пограммы становится понятнее с ГОТО, то почему бы и нет.
И как выход из сильно вложенных циклов, и как переход в начало обработки, и как переход на завешающие действия.
Программа ведь сначала в голове создается. Что-то типа блок-схемы. И если в голове она придумалась с goto, то так ее и записываем. Часто уже написав программу видишь лучше ее логику и от goto избавляешься.
А по-поводу фанатизма - все верно.
0
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
29.03.2010, 11:21  [ТС] 13
да кто фанатеет от готоне я точно...я думаю если используешь уже нравится
0
4197 / 1791 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
29.03.2010, 11:23 14
Мало опций. На бейсике я не могу без goto, на сях и паскале - с ним. Ну и как я должен ответить?
0
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
29.03.2010, 12:54  [ТС] 15
taras atavin, тема создана в разделе С++,не в разделах бейсик и паскаль,а как овтетть сам решай
0
4197 / 1791 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
29.03.2010, 12:59 16
Цитата Сообщение от Evg Посмотреть сообщение
Запросто. Многие компиляторы с языков, отличного от Си, работают через конвертацию из языка в Си (либо на уровне текстового фала, либо на уровне промежуточного представления). Си++, Паскаль, Фортран - всё это легко конвертируется в Си. В результате и получается такой код, истыканный конструкциями goto. Если посмотреть результат работы утилит типа lex, yacc, bison - на выходе они тоже генерят код Си, в котором тьма-тьмущая операторов goto
На бейсике я так вручную пишу.

Добавлено через 38 секунд
Цитата Сообщение от МедведЪ Посмотреть сообщение
тема создана в разделе С++,не в разделах бейсик и паскаль
Извините, тему прочитал, а раздел - нет.
0
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
29.03.2010, 16:27  [ТС] 17
Цитата Сообщение от taras atavin Посмотреть сообщение
Извините, тему прочитал, а раздел - нет.
=)
___
0
12 / 12 / 2
Регистрация: 08.07.2009
Сообщений: 45
01.04.2010, 22:22 18
Что касается выхода из сильно вложенных циклов, не проще ли использовать return вместо goto?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void foo()
{
    for (i=0; i<n;++i)
    {
        for (j=0; j<m;++j)
        {
            for (k=0; k<z;++k)
            { 
                //и ни каких goto
                if (array1[i,j,k]==10) return;
            }
        }
    }
}
0
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
01.04.2010, 22:28  [ТС] 19
Atrus, в этом случае выходит вообще из функции,а если работа функции не завершена

Добавлено через 1 минуту
Atrus, да и еще,если у вас функция возвращает void,то есть ничего не возращает,то писать ретурн это ошибка
0
12 / 12 / 2
Регистрация: 08.07.2009
Сообщений: 45
01.04.2010, 23:05 20
Нет. Это не ошибка. попробуйте скомпильте этот код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
using namespace std;
 
void foo()
{
    int a=1;
    if (a==1) return;
    cout<<"hello"; // в эту строчку мы никогда не попадем
}
 
int main()
{
    foo();
    return 0;
}

Цитата Сообщение от МедведЪ Посмотреть сообщение
а если работа функции не завершена
Тогда это,скорее всего, очень плохая функция. Или очень плохой алгоритм. Или и то и другое.
Вообще, если функция больше 20 строчек, то это уже повод задуматься о декомпозиции. А если делать по 100-150 строчек функцию, то такой способ программирования от "лапши" ничем отличаться не будет. Можно тогда в принципе функции не использовать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2010, 23:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Хороший тон для #include
Простите за глупый вопрос, но всё же интересно знать ответ :) Есть 2 заголовочных файла. 1.h ...

Хороший стиль программирования
Здравствуйте, меня интересует как правильно создаются архитектуры игр. К примеру: у меня есть...

Хороший стиль программирования: где размещать константы?
Здравствуйте, уважаемые форумчане! Давно хотел спросить. У меня есть проект, состоящий из...

Как называется движение программирования или теория программы считывающая др. язык программирования
Не знал, как по другому задать вопрос, и также назвать тему, но буду краток: Допустим я хочу...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.