Форум программистов, компьютерный форум CyberForum.ru

C++

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

 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.81
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,235
Завершенные тесты: 1
#1

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

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

вот в книгах читаю что гото туфта полная..на форуме тоже так говорят,а почему?очень нужная вещь,иногда лучше использовать это чем циклы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2010, 13:42     Хороший или плохой тон программирования
Посмотрите здесь:
Объединять классы и внешние функции в одной программе плохой тон программирования? C++
C++ Хороший тон программирования
Хороший тон для #include C++
Хороший стиль программирования: где размещать константы? C++
Visual C++ TCHAR + float != дружба или плохой wsprintf
C++ "Ляпы" в программе. Хороший стиль программирования
Первый язык программирования на подходе к С++: Паскаль или С? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.03.2010, 12:59     Хороший или плохой тон программирования #16
Цитата Сообщение от Evg Посмотреть сообщение
Запросто. Многие компиляторы с языков, отличного от Си, работают через конвертацию из языка в Си (либо на уровне текстового фала, либо на уровне промежуточного представления). Си++, Паскаль, Фортран - всё это легко конвертируется в Си. В результате и получается такой код, истыканный конструкциями goto. Если посмотреть результат работы утилит типа lex, yacc, bison - на выходе они тоже генерят код Си, в котором тьма-тьмущая операторов goto
На бейсике я так вручную пишу.

Добавлено через 38 секунд
Цитата Сообщение от МедведЪ Посмотреть сообщение
тема создана в разделе С++,не в разделах бейсик и паскаль
Извините, тему прочитал, а раздел - нет.
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,235
Завершенные тесты: 1
29.03.2010, 16:27  [ТС]     Хороший или плохой тон программирования #17
Цитата Сообщение от taras atavin Посмотреть сообщение
Извините, тему прочитал, а раздел - нет.
=)
___
Atrus
12 / 12 / 0
Регистрация: 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;
            }
        }
    }
}
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,235
Завершенные тесты: 1
01.04.2010, 22:28  [ТС]     Хороший или плохой тон программирования #19
Atrus, в этом случае выходит вообще из функции,а если работа функции не завершена

Добавлено через 1 минуту
Atrus, да и еще,если у вас функция возвращает void,то есть ничего не возращает,то писать ретурн это ошибка
Atrus
12 / 12 / 0
Регистрация: 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 строчек функцию, то такой способ программирования от "лапши" ничем отличаться не будет. Можно тогда в принципе функции не использовать.
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,235
Завершенные тесты: 1
01.04.2010, 23:22  [ТС]     Хороший или плохой тон программирования #21
Atrus, а причем тут это все Оо
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
02.04.2010, 00:30     Хороший или плохой тон программирования #22
Atrus, будет интересно посмотреть как вы напишите более менее серьезный проект. Просто прежде чем повторять чью-то фразу - надо понимать, что это всего лишь рекомендация и не более. Приведу простой пример, один
метод
Java
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
    private void initComponents() {
 
        mainFrame = new javax.swing.JFrame("Calculator");
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();
        jButton7 = new javax.swing.JButton();
        jButton8 = new javax.swing.JButton();
        jButton9 = new javax.swing.JButton();
        jButton10 = new javax.swing.JButton();
        jButton11 = new javax.swing.JButton();
        jButton12 = new javax.swing.JButton();
        jButton13 = new javax.swing.JButton();
        jButton14 = new javax.swing.JButton();
        jButton15 = new javax.swing.JButton();
        jButton16 = new javax.swing.JButton();
        jButton17 = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField(10);
        empty = new javax.swing.JLabel();
 
        mainFrame.setSize(428, 200);
        mainFrame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
      
        jButton1.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton1.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton1.setSize(40, 23);
        jButton1.setLocation(272, 45);
        jButton1.setText("1");
 
        jButton2.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton2.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton2.setSize(40, 23);
        jButton2.setLocation(318, 45);
        jButton2.setText("2");
        
        jButton3.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton3.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton3.setSize(40, 23);
        jButton3.setLocation(364, 45);
        jButton3.setText("3");
        
        jButton4.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton4.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton4.setSize(40, 23);
        jButton4.setLocation(272, 74);
        jButton4.setText("4");
 
        jButton5.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton5.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton5.setSize(40, 23);
        jButton5.setLocation(318, 74);
        jButton5.setText("5");
 
        jButton6.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton6.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton6.setSize(40, 23);
        jButton6.setLocation(364, 74);
        jButton6.setText("6");
 
        jButton7.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton7.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton7.setSize(40, 23);
        jButton7.setLocation(272, 103);
        jButton7.setText("7");
 
        jButton8.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton8.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton8.setSize(40, 23);
        jButton8.setLocation(318, 103);
        jButton8.setText("8");
 
        jButton9.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton9.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton9.setSize(40, 23);
        jButton9.setLocation(364, 103);
        jButton9.setText("9");
 
        jButton10.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton10.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton10.setSize(86, 23);
        jButton10.setLocation(272, 132);
        jButton10.setText("0");
 
        jButton11.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton11.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton11.setSize(40, 23);
        jButton11.setLocation(364, 132);
        jButton11.setText(".");
 
        jButton12.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton12.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton12.setSize(40, 23);
        jButton12.setLocation(226, 45);
        jButton12.setText("/");
 
        jButton13.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton13.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton13.setSize(40, 23);
        jButton13.setLocation(226, 74);
        jButton13.setText("*");
        
        jButton14.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton14.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton14.setSize(40, 23);
        jButton14.setLocation(226, 103);
        jButton14.setText("-");
 
        jButton15.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton15.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton15.setSize(40, 23);
        jButton15.setLocation(226, 132);
        jButton15.setText("+");
 
        jButton16.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton16.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton16.setSize(40, 23);
        jButton16.setLocation(180, 45);
        jButton16.setText("(");
 
        jButton17.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton17.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton17.setSize(40, 23);
        jButton17.setLocation(180, 74);
        jButton17.setText(")");
 
        jTextField1.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        jTextField1.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR));
        jTextField1.setFont(new java.awt.Font("Tahoma", 0, 18));
        jTextField1.setSize(393, 27);
        jTextField1.setLocation(12, 12);
        
        mainFrame.getContentPane().add(jButton1);
        mainFrame.getContentPane().add(jButton2);
        mainFrame.getContentPane().add(jButton3);
        mainFrame.getContentPane().add(jButton4);
        mainFrame.getContentPane().add(jButton5);
        mainFrame.getContentPane().add(jButton6);
        mainFrame.getContentPane().add(jButton7);
        mainFrame.getContentPane().add(jButton8);
        mainFrame.getContentPane().add(jButton9);
        mainFrame.getContentPane().add(jButton10);
        mainFrame.getContentPane().add(jButton11);
        mainFrame.getContentPane().add(jButton12);
        mainFrame.getContentPane().add(jButton13);
        mainFrame.getContentPane().add(jButton14);
        mainFrame.getContentPane().add(jButton15);
        mainFrame.getContentPane().add(jButton16);
        mainFrame.getContentPane().add(jButton17);
        mainFrame.getContentPane().add(jTextField1);
        mainFrame.getContentPane().add(empty);
        
        mainFrame.setVisible(true);
    }
на java. Думаете стоит задуматься о его декомпозиции? Забудьте те заученные фразы и поступайте исходя из личного опыта. Если повторять все время старые советы, то ничего нового изобрести нельзя будет. Как в той истории "Он просто не знал, что задача была нерешаемой"
Atrus
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 45
02.04.2010, 02:29     Хороший или плохой тон программирования #23
M128K145

Если вы вдруг захотите добавить функциональность, в ваш калькулятор(у вас ведь серьезный проект, поэтому заказчик обязательно попросит) вам будет очень неприятно работать с предложенным выше методом. Допустим, кнопки должны будут менять свои координаты, атрибуты и даже функционирование при переключении с режима "обычный калькулятор" на режим "инженерный калькулятор". Должно будет изменяться их количество. В вашем же методе сплошной хардкодинг, который убивает всю гибкость. Поэтому, вы правы, этот метод не нуждается в декомпозиции. Он нуждается в полной переработке.

***
Как насчет массива элементов jButton?
А параметры каждой кнопки можно из конф. файла считывать.
А метод станет размером в 12 строк(Что конечно как вы правильно заметили не главное, но все-равно очень приятно).
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
02.04.2010, 13:47     Хороший или плохой тон программирования #24
goto запутывает код: делает переходы неочевидными и неудобочитаемыми. Если метка на другой странице, то как это прочитать ? Если требуется goto, значит проект составлен очень плохо или его нет вовсе. Надо делать упор не на оправданности goto, а на хорошем проекте.
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,893
Записей в блоге: 26
02.04.2010, 14:46     Хороший или плохой тон программирования #25
Цитата Сообщение от Airhand Посмотреть сообщение
goto запутывает код: делает переходы неочевидными и неудобочитаемыми.
Не надо обощать. Аккуратно написанный goto сэкономит время людям, которые будут читать этот код. А искусствено воткнутые процедуры читабельность ухудшают.

И не надо говорить, что goto запутывают код. Есть гении, которые способны запутать код на ровном месте одними лишь арифметическими операциями. А потому читабельность кода зависит от наличия мозга, а не от наличия goto
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
02.04.2010, 14:57     Хороший или плохой тон программирования #26
В общем случае, goto добавляет мест, которые нужно держать в памяти, а она не безгранична.

Как один из пунктов УМЕНЬШЕНИЯ удобочитаемости можно сформулировать так: "применяйте везде goto". Это ещё не значит, что нельзя запутать прогу не применяя goto.
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,893
Записей в блоге: 26
02.04.2010, 15:01     Хороший или плохой тон программирования #27
Цитата Сообщение от Airhand Посмотреть сообщение
В общем случае, goto добавляет мест, которые нужно держать в памяти, а она не безгранична
А зачем общий случай? Я пишу конерктную программу с конерктно втсавленным оператором goto, который делает программу более понятной, нежели искусственные попытки принципиального написания без goto.
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
02.04.2010, 15:06     Хороший или плохой тон программирования #28
Нужно не программу принципильно менять, а переделывать проект. Значит что-то в нём плохо, раз понадобился goto. Я ни в коем случае не говорю, что надо принципиально от него отказаться. Дело не в принципе.
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,893
Записей в блоге: 26
02.04.2010, 15:08     Хороший или плохой тон программирования #29
Цитата Сообщение от Airhand Посмотреть сообщение
Значит что-то в нём плохо, раз понадобился goto
Мде... Чем-то ты мне напоминаешь другого участника форума, который помешан на linux'е
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2010, 20:28     Хороший или плохой тон программирования
Еще ссылки по теме:
В какой среда программирования(или компиляторе) открыть нижеуказанный код? C++
плохой gets() C++
C++ С++ или С. Какой язык программирования необходимо знать изначально, чтобы далее изучать Objective C?
Visual C++ Плохой проект

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

Или воспользуйтесь поиском по форуму:
^Tecktonik_KiLLeR
02.04.2010, 20:28  [ТС]     Хороший или плохой тон программирования
  #30

Не по теме:

Evg, я его знаю

Yandex
Объявления
02.04.2010, 20:28     Хороший или плохой тон программирования
Ответ Создать тему
Опции темы

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