Имя: Пароль:
1C
 
Как писать качественный код?
0 Дебет
 
21.12.17
09:19
1. Много кода писать 56% (5)
2. Читать \"чужой\" код 44% (4)
Всего мнений: 9

Работаем с коллегой в отделе занимающимся 1с.Оба пишем код, я хорошо понимаю администрирование 1с, а колгега хорошо понимает алгоритмы и пишет качественный код. С недавнего времени стал прикалывать что я пишу быдло код =(. Конечно когда нужно сделать еще вчера то нет времени писать качественно, делаешь просто что бы работало. Но сама мысль не дает теперь покая, как улучшить качество кода ? И есть оправдание быдло коду ?
57 vde69
 
модератор
21.12.17
10:59
(56) мне - нормально, недавно полез исправлять свою поделку на дельфях десятилетней давности, мне все понятно было...
58 ildary
 
21.12.17
11:01
(56) Не, десятилетный код - это уже не ужас, а комедия.
59 Адинэснег
 
21.12.17
11:02
кстати, да
найди и попроси коллег твоего тру-кодера выслать его код, который он на старте писал...
поржёте вместе
60 Адинэснег
 
21.12.17
11:03
заодно будут живые примеры гамнакода, с пояснениями автора
61 Провинциальный 1сник
 
21.12.17
11:03
(57) Ну дело тут не в понятности. Просто студенческие поделки кишмя кишат велосипедами, проистекающими из незнания темы. После того, как становишься в теме, свои старые проекты прямо руки чешутся переписать правильно. Только лень мешает.
62 GANR
 
21.12.17
11:14
Ни с одним из вариантов не согласен
63 MrCoffin
 
21.12.17
11:28
(3) Можно пользоваться деревенским уличным туалетом, биде и делать всё в резиновых одноразовых перчатках. И при этом писать красивый код.
64 1Снеговик
 
гуру
21.12.17
11:36
Красивый код - это не только читаемый, но и эффективный.
А еще он должен выполнять свою функцию, а не гонять данные ради красоты.

И еще считаю важным делать проверки на заполненность, на возможность деления на 0, ограничивать ошибки пользователя. В общем, продумывать в алгоритмах наперед что в них может пойти не так.

Плюс красиво работу кода подавать, рисовать интерфейс, строки состояния, вопросы при нажатии на кнопки.

Ну и конечно не писать
"Если Квартира.Наименование = "23" тогда"
и прочие запросы в циклах.
65 nordbox
 
21.12.17
11:40
(64)>>ограничивать ошибки пользователя.
верно. Программа должна быть ДУРАКОУСТОЙЧЕВАЯ ))
66 Terv
 
21.12.17
11:43
(63) ссать на пол и при этом писать красивый код - это оксюморон. разруха в голове не бывает частичной.
67 art commander
 
21.12.17
11:58
(0) Код не бывает красивый или некрасивый. С объективной точки зрения, всякий код - убожество (субъективно - код может казаться красивым его автору). Код бывает работающим и не работающим.
68 Адинэснег
 
21.12.17
13:22
ТС про красоту ни слова не писал
69 art commander
 
21.12.17
15:18
(68) Можешь заменить "красивый" на "качественный" без потери смысла.
70 lodger
 
21.12.17
15:28
(67) есть (два стула, на одном ...) два куска кода.
делают одно и то же, делают это успешно.
первый написан одной процедурой в 1000 строк без комментариев с цикличными неявными чтениями бд по десятку раз за круг, другой оформлен модулем с несколькими точками входа в экспортных процедурах, параметризуются по потребности, повторяемые части кода вынесены в функции, сперва происходит сбор всех необходимых данных, отдельно  цикличная математика и блоки условий, постобработка.
какой сам напишешь, какой у коллеги прочитаешь?
71 be-may
 
21.12.17
15:29
Нет единого рецепта.

Меня, например дико раздражают чьи-то переменные названные примерно так :
Параметр
Параметр
Параметр
Видимо, на сях сидел человек когда-то.
Вроде ж ничего такого, но не нравится))

Еще переменные типо
КакаяТоНеведомаяХерня = ..

ну как так можно вообще..
72 be-may
 
21.12.17
15:30
упс..
форматировался текст в (71)
Имелось в виду параметр, начинающийся с одного, двух , трех или более символов нижнего подчеркивания.
73 be-may
 
21.12.17
15:33
еще из "не люблю".
Не люблю когда пишут, так, будто экономят "бумагу"
Если ... Тогда .. Иначе .. КонецЕсли  и это все на одной строке.
74 MrCoffin
 
21.12.17
15:34
(66) Не на пол, а в специально проделанное для этого отверстие в полу.
75 Fish
 
21.12.17
15:44
(0) "Как писать качественный код?" - Качественный код писать очень просто: надо писать его качественно! :)
76 art commander
 
21.12.17
15:47
(70) И то и другое - убожество.
77 Timon1405
 
21.12.17
15:49
(73) так код быстрее выполняется. серьезно.
выполните код и сравните результаты
Для Сч=1 по 10000000 цикл
    Если 2=1 Тогда а=1 иначе а=2 КонецЕсли;
КонецЦикла;
Для Сч=1 по 10000000 цикл
    Если 2=1
        Тогда а=1
    Иначе
        а=2
    КонецЕсли;
КонецЦикла;
78 Terv
 
21.12.17
15:55
(77) толсто
79 0xFFFFFF
 
21.12.17
15:55
(75) Ну или так: Чтобы писать качественный код, не нужно писать некачественный.
80 Terv
 
21.12.17
15:56
(79)"Делай хорошо - плохо само получится. " (цы)
81 nordbox
 
21.12.17
21:03
(0)https://habrahabr.ru/post/328864/
Завтра тяпница, почитаешь
82 echo77
 
21.12.17
21:08
(5) +1
Еще попросите коллегу устраивать вам "ревизию кода" - это перед тем как пустить в продакшн - показываете ему код, он говорит, что надо переделать, как делать нельзя, что надо исправить и на что.
Я так своих коллег ростил, передавал им свой опыт, что-то узнавал от них.

Много кода писать
83 echo77
 
21.12.17
21:08
Вредные советы: http://catalog.mista.ru/public/391560/
84 nicxxx
 
21.12.17
22:41
(77) а так еще быстрее будет:
Для Сч=1 по 10000000 цикл Если 2=1 Тогда а=1 иначе а=2 КонецЕсли;  КонецЦикла;
85 nicxxx
 
21.12.17
22:42
(78) а ты возьми и замерь. толсто ему...
86 jsmith82
 
21.12.17
22:46
Тема ни о чём
87 ejikbeznojek
 
21.12.17
23:36
из того, что в этой теме прочитал, на вид правильнее всего (12)
Начни с малого, тяжело написать качественно большой объём кода. Напиши качественно маленькую функцию и качественный её вызов.
88 tesseract
 
21.12.17
23:38
Этой фразе лет 40:
Каждый раз читая свой год 5-летней давности, понимаешь,  что его писал какой-то дебил.
89 be-may
 
21.12.17
23:43
(84) угу, а если пробелы почистить , то еще быстрее..
----
и что, часто надо организовывать цикл типо
Для Сч=1 по 10000000 цикл  ... ?

ИМХО, экономия на спичках. Не в том месте надо время экономить
90 France
 
21.12.17
23:53
(0) если фикси - забей... для фикси нет понятия быдло-код..
если франь - напрягись...
91 H A D G E H O G s
 
21.12.17
23:54
(0) Плохой код пишется долго.

Если ты пишешь код долго - ты написал его плохим, убей его.
92 Роки
 
21.12.17
23:57
(0) Хороший код - мертвый код
93 VladZ
 
22.12.17
04:41
(90) Зря ты так. Плохой код портит карму. Оставишь его потомкам - они проклянут автора кода и нашлют на него проклятия "бедности и нищеты"...
94 nordbox
 
22.12.17
08:03
(93) ты уверен что потомки поймут что такое 1с и раcшифруют код?
95 Злопчинский
 
22.12.17
08:06
Давайте решать проблемы по мере их возникновения
96 nordbox
 
22.12.17
08:08
+94 Наши потомки будут так же как мы )))
http://d.radikal.ru/d20/1712/cb/9ee1839d547e.jpg
97 ildary
 
22.12.17
08:39
Хочу задать вопрос по теме: как лучше называть куски кода, когда надо в свою обработку вставить некий кусок (например функцию из общего модуля), и внести в неё изменения? Единственное что приходит в голову: писать в комментарии "Заимствованный код", но уж больно сложное слово, хотелось бы попроще (без потери смысла).
98 Mort
 
22.12.17
08:44
(97) И кому будет полезен этот комментарий? Всем пофиг откуда ты её скомуниздил.
99 golem14
 
22.12.17
08:44
(81) почитал и поборол в себе Эффект Даннинга — Крюгера
100 Mort
 
22.12.17
08:50
(90) Имхо как раз наоборот, у фикси есть достаточно свободного времени, чтобы вылизать код, а франи оставляют первый работающий вариант, нет времени для этого. Мы вот юзаем франей, и от многих их спецов отказались по причине обнаруженного г-кода, и сейчас всё очень даже сносно.
101 ildary
 
22.12.17
08:54
(98) Хочу писать подобное для себя, чтобы через год самому было проще вспомнить. Или при обновлении базы - не бегать по всем обработкам вручную, а искать по тегу в комментарии.
102 VladZ
 
22.12.17
09:00
(101) В данном случае достаточно коммента "Добавил Вася Пупкин, 22 декабря 2017г".
103 Mort
 
22.12.17
09:08
(101) Даже не знаю, что сложнее: соблюдать всю эту бюрократию или раз в год разобраться что отвалилось и почему. Причем с бюрократией есть один нюанс...
Все эти строительные леса в виде якорей в коде, 100% покрытия тестами и прочие перделки так и не образовали устойчивые стандарты, ибо снижают количество ошибок не до нуля, а на процент. И вопрос о том, что важнее - протерянные ресурсы на поддержку всего этого или гипотетические ошибки в продукте очень сильно зависит от области применения. Не все космические корабли программируют.

Ща набегут упоротые TDDшники.
104 Nyarlathotep
 
22.12.17
09:08
(0) "что я пишу быдло код"

Забей. Придирки к качеству кода - это задротство, а твой коллега - задрот. "Качество кода" - понятие сугубо индивидуальное, у каждого оно свое. Если задача решена в срок, все работает правильно и не тормозит - значит все ок и код качественный. Ориентируйся на результат, а не на процесс.

Много кода писать
105 ildary
 
22.12.17
09:13
(102) как найти все вытащенные из общих модулей процедуры и функции, если у них нет общего тега?

(103) Конечно это всё бюрократия, вот только когда переходишь с одной подверсии конфигурации на другую, вся эта бюрократия так выручает! Из моего недавнего прошлого УТ - 11.1->11.2-11.3. И из предстоящего - 11.4.
106 Nyarlathotep
 
22.12.17
09:18
(19) Убогий.
107 VladZ
 
22.12.17
09:26
(105) Общий тег "Вася Пупкин"
108 VladZ
 
22.12.17
09:32
(104) Есть такое понятие как "сложность поддержки информационной системы". Чем хуже код - тем сложнее его поддерживать. Нужны дополнительные ресурсы. А это деньги. На плохом коде организация будет терять деньги.
109 Nyarlathotep
 
22.12.17
09:35
(108) А по каким критериям отделять "плохой код" от "хорошего"?
110 Buster007
 
22.12.17
09:44
(106) покажешь свой "гениальный" код?
111 ildary
 
22.12.17
09:48
(107) тег "Вася Пупкин" - общий для любого добавления, поэтому для моего случая не подходит.
112 Nyarlathotep
 
22.12.17
09:51
(110) Нет :)
113 VladZ
 
22.12.17
10:09
(109) Давай я покажу тебе код, а ты реши.  Итак, процедура формирования ТТН на вывоз (часть кода):

ОбластьСтрока.Параметры.ТоварНаименование            = "Боковина без лестницы";
                ОбластьСтрока.Параметры.КодПродукции                 = "";
                ОбластьСтрока.Параметры.НомерПрейскуранта            = СтрСчет.СчетНаОплату.ДоговорКонтрагента.Номер;
                ОбластьСтрока.Параметры.Артикул                      = "";
                ОбластьСтрока.Параметры.Количество                      = 2 * Коэффициент;
                ОбластьСтрока.Параметры.КоличествоМест                  = "";
                ОбластьСтрока.Параметры.БазоваяЕдиницаНаименование = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
                ОбластьСтрока.Параметры.ВидУпаковки                    = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
                ТабДокумент.Вывести(ОбластьСтрока);
                
                ОбластьСтрока.Параметры.ТоварНаименование            = "Боковина с лестницей";
                ОбластьСтрока.Параметры.КодПродукции                 = "";
                ОбластьСтрока.Параметры.НомерПрейскуранта            = СтрСчет.СчетНаОплату.ДоговорКонтрагента.Номер;
                ОбластьСтрока.Параметры.Артикул                      = "";
                ОбластьСтрока.Параметры.Количество                      = 2 * Коэффициент;
                ОбластьСтрока.Параметры.КоличествоМест                  = "";
                ОбластьСтрока.Параметры.БазоваяЕдиницаНаименование = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
                ОбластьСтрока.Параметры.ВидУпаковки                    = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
                ТабДокумент.Вывести(ОбластьСтрока);
                
                ОбластьСтрока.Параметры.ТоварНаименование            = "Перекладина";
                ОбластьСтрока.Параметры.КодПродукции                 = "";
                ОбластьСтрока.Параметры.НомерПрейскуранта            = СтрСчет.СчетНаОплату.ДоговорКонтрагента.Номер;
                ОбластьСтрока.Параметры.Артикул                      = "";
                ОбластьСтрока.Параметры.Количество                      = 2 * Коэффициент;
                ОбластьСтрока.Параметры.КоличествоМест                  = "";
                ОбластьСтрока.Параметры.БазоваяЕдиницаНаименование = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
                ОбластьСтрока.Параметры.ВидУпаковки                    = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
                ТабДокумент.Вывести(ОбластьСтрока);
114 VladZ
 
22.12.17
10:15
еще пример:

Процедура МояМегаПроцедура()

Если УсловиеВыполяется Тогда
// тут 100500 строк кода

КонецЕсли;

КонецПроцедуры
115 Адинэснег
 
22.12.17
10:21
(90) новый анекдот
"Франч без быдлокода" ...
в довесок к "Франч покрыл всю систему тестами"
116 Nyarlathotep
 
22.12.17
10:23
(113) (114) И что я должен решить?
117 Адинэснег
 
22.12.17
10:25
Для Сч=1 по 10000000 цикл
    Если 2=1
        Тогда а=1
    Иначе
        а=2
    КонецЕсли;
КонецЦикла;


так еще быстрее:

а=2;
Сч = 10000000;
118 nordbox
 
22.12.17
10:26
(115)>>"Франч без быдлокода" ...
ты еще скажи франч- без студентов
119 Адинэснег
 
22.12.17
10:27
(118) без дошика
120 Nyarlathotep
 
22.12.17
10:28
(119) Про Дошик не надо, Дошик - это святое :)
121 Адинэснег
 
22.12.17
10:29
(113) когда забанили в конструкторе запросов...
122 MaxS
 
22.12.17
10:31
(40) Странный программист. Не настроены приоритеты по прерываниям. Более важные дела должны были прервать выполнение и выйти из цикла.
123 nordbox
 
22.12.17
10:34
(122) у него обработчик прерывания был кривой
Звонок с телефона не предавался как параметр, потому что в другой комнате был )
124 Terv
 
22.12.17
11:09
(85) еще толще

троллей развелось тут я смотрю
125 ildary
 
22.12.17
11:27
В итоге решил скопированный и измененный код помечать вот так:

//Вытащено из ЧекККМ.НастроитьПраваДляПользователя() для того и сего
126 Timon1405
 
22.12.17
11:34
127 Nyarlathotep
 
22.12.17
11:37
(125) Я типовой вообще никогда не трогаю, делаю вот так:

//Nyarlathotep 22.12.2017 мояпочта@почтовыйсервер.ru {
//По задаче "Тут название задачи", автор задачи - "Тут автор задачи"
//Тут описание функционала добавляемого/изменяемого кода
//Закомментировал {
Тут закомментированный типовой код без изменений
// } Закомментировал
Тут мой добавленный/измененный код
// } Nyarlathotep 22.12.2017 мояпочта@почтовыйсервер.ru
128 Nyarlathotep
 
22.12.17
11:40
(127) Таким образом откат к типовому функционалу решается комментированием/раскомментированием пары находящихся рядом секций кода, в случае чего.
129 Nyarlathotep
 
22.12.17
12:10
Срача по поводу того, чей же код правильнее, я так понимаю, не будет? :)
130 nordbox
 
22.12.17
12:31
(129) коментов в коде будет больше чем самого кода )
131 Адинэснег
 
22.12.17
12:32
(129) тут даже срача франч/фикси нет... все выдохлись на Мисс Бюст
132 Адинэснег
 
22.12.17
12:35
// { Автор Задача
//Закоментированный
//типовой
//код
//// Коммент из типового кода

Новый код
// коммент мой

// }
133 brznzglwgn
 
22.12.17
12:35
Смотря где..
В 1С половина написания кода это найти место внутри 10 вложенного проваливания в функции, далее там твой "качественный" код будет базироваться на уже написанном "высококачаственном" и понятном коде от 1С.
134 ADirks
 
22.12.17
12:36
(113) недавно пришлось в ЗиКе семёрошном переделывать какое-то расчет, а там на 90% код копипастой написан, ну и как в (114) тоже. Сломал весь моск, пытаясь найти, куда бы впилится. Плюнул, занялся рефакторингом... ну небыстро да... Через какое-то время код сократился в 10 (десять) раз, и наконец-то стало всё понятно. Заодно работать стало быстрее раза в три.

Вот вам и "лишь бы работало".
135 Адинэснег
 
22.12.17
12:36
(132) в комменте только номер задачи из системы регистрации задач/проблем/инцидентов
136 nordbox
 
22.12.17
12:39
короче, вот так получается ))
https://www.youtube.com/watch?v=JsG94qngMNU
137 Terv
 
22.12.17
12:50
(126) И?
ты хочешь доказать присутствия мозга у людей, которые закладываются на особенности компилятора при разработке не embedded-систем?
особенно учитывая, что их нормо-час стоит часто несколько новых процессоров.
или нынче в технических вузах перестали преподавать экономику и заставлять обсчитывать экономическую эффективность своей работы?
138 kyvv
 
22.12.17
13:03
139 ildary
 
22.12.17
13:26
(134) мне интересно, когда-нибудь разработчики БСП почувствуют, что ушли немного не туда и займутся наведением порядка?
140 ADirks
 
22.12.17
13:33
(139) с чего вдруг? у них стандарты такие, всё абсолютно нормально.
141 echo77
 
22.12.17
13:41
(97) Пишу перед функцией комментарий:
// Сперто из общего модуля...
142 33554432
 
22.12.17
13:42
С красивым кодом все непросто. Заказчик просит сделать быстро и еще вчера, как обычно. Ты либо делаешь как быстрее, либо получаешь под зад. Как быстрее, это как привычнее, даже если не красиво. Кто заморачивается на красоту под зад получает чаще при равноценной конкуренции. А кто пишет некрасиво получает под зад, если наталкивается на любителя красоты со стороны заказчика, но это реже.
143 ildary
 
22.12.17
13:44
(141) Хорошо, но немного грубовато. Я плохой, на быструю руку накаляканный код помечаю как //Костыль и молюсь, чтобы это место никто не увидел. Пока красивую замену слову "Костыль" не нашёл.
144 echo77
 
22.12.17
13:48
(143) Можно писать :
// Взять из Документ.СчетФактураВыданный.МодульМенеджера
145 Nyoko
 
22.12.17
13:55
Читать ИТС. По быдлокоду просто конкретно спросить где сделал ошибку, и дальше много кода писать.

Читать \"чужой\" код
146 DomovoiAtakue
 
22.12.17
13:55
(0)А можно примеры?
Обычно быстрее написать сразу нормально.
147 _Дайвер_
 
22.12.17
13:59
Возврат;    
КонецПроцедуры
148 nordbox
 
22.12.17
14:09
Первая мысль от бога(как бы быстро), вторая лукавого(быдлкод) ))
149 Nyarlathotep
 
22.12.17
14:17
(134) "код сократился в 10 (десять) раз, и наконец-то стало всё понятно. Заодно работать стало быстрее раза в три."

Вот бы с типовыми также.
150 ADirks
 
22.12.17
14:26
(149) ну кагбе это и была типовая конфа :))
И там всегда будет так, как завещал гражданин в (142). Причём чем дальше, тем хуже, ибо г. имеет свойство накапливаться.
151 Hans
 
26.12.17
09:14
подпишусь
152 hhhh
 
26.12.17
09:45
(128) такой коммент возможен, только если одна вставочка. А обычно как бывает

//Nyarlathotep 22.12.2017 мояпочта@почтовыйсервер.ru {

//По задаче "Тут название задачи", автор задачи - "Тут автор задачи"
//Тут описание функционала добавляемого/изменяемого кода

//Закомментировал {

Тут закомментированный типовой код без изменений

в нем вася Пупкин такой-то год

тут же здесь быол Гриша.

тут же Nyarlathotep 2013

опять типовой

опять Вася Пупкин.

и опять продолжение //Nyarlathotep 22.12.2017 мояпочта@почтовыйсервер.ru


И в итоге такой бред получается. Особенно если одну строчку комментировали сразу несколько человек. Ну или один человек, но с интервалом в 2 года.
153 Злопчинский
 
26.12.17
10:01
(108) и что, много, например 1сников модифицирует исходный код? Именно модифицирует, а не лепит нашлепки?
154 DenVaz
 
26.12.17
10:10
Спроси любого "программиста" - адынесники "не программисты". Отсюда следует: пиши любой код - всем пофер.
155 patria0muerte
 
26.12.17
10:20
У нас для типового кода используется безымянная вставка

//--> PRS

Тут изменения

//--< PRS

Остальная информация по изменениям - в шапке молуля по датам: кто, что, когда, зачем (по какой задаче).

Ну и плюс - хранилище, в котором более подробно все в комментариях расписано

Для пиления старой УПП - хватает за глаза
156 D_E_S_131
 
26.12.17
11:14
В (15) собственно все написано, но подобного варианта в голосовашке нет.