Страницы: 1
RSS
А как ты кодишь?
 
Всем привет!

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

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

Всем заранее спасибо!
 
NeTwoj,  мне кажется, вы смещали в кучу стиль оформления кода с его краткостью и эффективностью.  Первое - влияет на читаемость, краткость - не всегда хороша, как с точки зрения читаемости, так и скорости выполнения, но часто зависит от тех или иных методов, которые используются.  Ну и эффективность - тут может быть как математический аппарат и эффективность алгоритма, так и использованием объектов, приемов и прочего. Так что вы хотите тут обсудить?
По вопросам из тем форума, личку не читаю.
 
Цитата
NeTwoj написал: рабочий код с комментариями намного лучше.
На форуме много примеров. Там и можно посмотреть, у кого какой почерк )

У меня.
Венгерская нотация.
Имена переменных и процедур - более-менее понятные (не f25, jjj)
Массивы - с буквы a (aSpl, aNameFiles())
Переменные, применяемые часто - имена не меняются и короткие (lRw, lClmn, sTmp, bFlag, dDateS)
Глобальные переменные - применяю, но стараюсь обходиться без них.
Cчетчики - одна буква: i,n,m - по вертикали, j,p ("с хвостиком") - горизонталь
Объявление переменных и наличие Option Explicit - обязательно
Использование событий листа - по необходимости, но если можно обойтись, заменяются другим.
Обязательное включение отключенных обновления экрана, сообщений... Обязательная очистка ранее занятой памяти (Set wBook = Nothing)

Отступы в коде - обязательно.
Объединение строк в одну, через : - если строки логически связаны и не длинно. Или, например:
If a<b Then a=b (одной строкой, без End If)
Раньше писалось все в одной процедуре-простыне, сейчас разделяю на отдельные процедуры и функции.

Это навскидку, что быстро вспомнилось.
 
Лично мне больше нравятся стили от Казанского и Игоря Гончаренко - все предельно лаконично и сжато.
До прихода на этот форум писал, как научился когда-то на ассемблере - две табуляции (пространство под метки перехода) и текст программы/процедуры единой стеной. Но тут мои кракозябры видят другие люди, поэтому использую отступы в два пробела в циклах, условиях и пр.. Переменные у меня в основном одно-двух буквенные для кратости ввода , код не особо читабелен.
 
Не думаю что стоит беспокоится на счет стиля VBA - прикладной язык для частных задач, здесь главное не красота разработки, а ее скорость. Часто приходится что-то переделывать под вновь открывающиеся обстоятельства. В этом собственно и плюс. Пока системный программист только составит план, ты уже сдаешь проект. 80% проектов можно написать объектами книги, листа, а уже  что-то, где требуется реальное быстродействие - работа с очень большими данными или частое применение макросов, здесь стоит подключить массивы, словари, коллекции и т.п.

По мне, главная ценность прикладного программиста умение быстро видеть и закрывать потребности в автоматизации и закрывать их по возможности на 100%. Видел много красивых кодов, но они решали 5% всей задачи, тогда как ее можно было решить кодом на 100%. Здесь и неумение пользователей ставить ТЗ и нежелание разработчика разобраться в процессе.

Также видел много "красивых" с точки зрения тех кто учился на программиста кодов - все объекты завернуты в переменные, каждая мелочь выносится в функцию, повсюду метки GO TO (типа обработчики ошибок) - разобраться в таком коде сопровождающему непросто и не быстро. VBA это скрипт - когда ты считываешь понятную последовательность операций со знакомыми объектами поддержка чужого кода становится куда проще. Я не говорю что надо писать все в одну портянку, но излишние объявления и заворачивания тоже зло. Также и со стороны разработки - человек пишущий знакомыми методами и шаблонами, просто соединяя их как конструктор и меняя параметры может закрыть задачу за день, между тем как любитель написать красивый код берет на нее неделю.

VBA программист это не просто кодер – зачастую он сам себе и архитектор и бизнес-аналитик и проектировщик.

Изменено: Djinn - 05.02.2019 09:57:09
 
Цитата
vikttur написал:
Раньше писалось все в одной процедуре-простыне, сейчас разделяю на отдельные процедуры и функции.
часто в подпрограмму/функцию только в случае многократного вызова превращают, но это позволяет выделить и логически изолированный блок, проще отлаживать, не гонять лишние переменные по простыне …, в том числе и экономит память.

Цитата
Anchoret написал:
все предельно лаконично
ну да правда когда не доходит до такого :-) Вот такие строки делают код трудно понимаемы для другого и требуют комментариев. Тут как раз "кратко" - не равно "понятно" может получится. Но надо отдать должное такие приемы действительно на заметку берешь.

Встречал коды перенасыщенные комментариями. Выделить блок строк, написать что он делает  и может быть не очевидное пометить, но не писать  "цикл по строкам" ....

Отдельная наука - обработка ошибок и отладка.


Цитата
Djinn написал:
По мне, главная ценность прикладного программиста умение быстро видеть и закрывать потребности в автоматизации и закрывать их по возможности на 100%.
только тут нужно учитывать один крохотный момент - время жизни этих 100%. Если завтра что-то изменится и 100 превратятся в 0 по тому что что-то не предусмотрено, то ценность этому решению тоже 0. Я не программист, те скрипты и решения что выходили по необходимости из под моего "пера" не считаю большими проектами, но как приятно, что спустя несколько лет мне пишут, что оно все еще работает и облегчает жизнь.
Изменено: БМВ - 05.02.2019 10:03:52
По вопросам из тем форума, личку не читаю.
 
Написанию программ на VBA учился самостоятельно, так что многое приходилось осознавать через грабли.
Самый главный вывод, изучите все возможности Excel, в частности функции, условное форматирование, сводные таблицы, Power Pivot и Power Query. ИМХО 95% всех задач в Excel можно решать собственными средствами Excel не прибегая к кодированию.

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

И ещё - разделять любую задачу на логические подзадачи и каждую подзадачу оформлять в качестве отдельной процедуры. Т.е.:
Код
Sub задача
    Call подзадача1()
    Call подзадача2()
    Call подзадача3()
End Sub

Sub подзадача1()
End Sub

Sub подзадача2()
End Sub

Sub подзадача3()
End Sub

Даже если Ваша подзадача состоит всего лишь из одной строки кода, оформляйте её в отдельную процедуру.
No crime is so great as daring to Excel. (Winston Churchill)
 
Цитата
Maruf написал:
если Ваша подзадача состоит всего лишь из одной строки кода, оформляйте её в отдельную процедуру
Если ее нужно выполнять много раз (ну или хотя-бы 3-5 раз, что бы потом не искать концы и исходные). А если подзадача - разовая, достаточно понятного комментария. ИМХО
Очень правильная мысль (но не совсем по теме):
Цитата
изучите все возможности Excel
С нынешними возможностями (новыми фишками, новыми формулами и новыми средствами  Excel) при выполнении последнего условия потребность в макросах отпадет почти ваащще. А остальным пользователям как быть? Если они привыкли искать на форумах готовые решения? Думаю, пока Excel живет на компах у довольно большого количества пользователей, макросы будут нужны до тех пор, пока ваащще все пользователи не изучат вааще все возможности Excel  :)  
Изменено: _Igor_61 - 05.02.2019 20:49:59
 
Цитата
_Igor_61 написал:
Если ее нужно выполнять много раз (ну или хотя-бы 3-5 раз, что бы потом не искать концы и исходные). А если подзадача - разовая, достаточно понятного комментария. ИМХО
Сужу чисто из своей практики:
  1. Оформление каждой подзадачи в процедуру облегчает чтение кода;
  2. В большинстве случаев нельзя заранее предугадать какую именно подзадачу придётся использовать повторно;
  3. Даже если оформленная в отдельную процедуру подзадача больше не пригодилась в коде, она может пригодиться в другом проекте, так что её можно будет просто скопировать в готовом виде, без шелухи.
Цитата
_Igor_61 написал: С нынешними возможностями (новыми фишками, новыми формулами и новыми средствами  Excel) при выполнении последнего условия потребность в макросах отпадет почти ваащще. А остальным пользователям как быть? Если они привыкли искать на форумах готовые решения? Думаю, пока Excel живет на компах у довольно большого количества пользователей, макросы будут нужны до тех пор, пока ваащще все пользователи не изучат вааще все возможности Excel  
Речь не об обычных пользователях а именно тех, кто решил кодить в VBA. Так как, например использование условного форматирования, может гораздо облегчить процесс оформления "юзер-интерфейса" при создании приложения, а использование расширенного фильтра облегчит труд по написанию кода для выгрузки данных по условию. Именно поэтому, человеку решившему кодить на VBA для Excel полезно для начала изучить весь функционал этой программы.
Изменено: Maruf - 06.02.2019 12:11:13
No crime is so great as daring to Excel. (Winston Churchill)
 
Цитата
Maruf написал:
Именно поэтому, человеку решившему кодить на VBA для Excel полезно для начала изучить весь функционал этой программы.
Этак можно прийти к выводу, что мне кодить ещё нельзя, я до сих пор за двадцать с лишним лет так и не освоил формулы :(  Забавное заключение получается.
Изменено: Андрей VG - 06.02.2019 14:27:31
 
Цитата
Maruf написал:
человеку решившему кодить на VBA для Excel полезно для начала изучить весь функционал этой программы
А есть такие, которые знают весь функционал? )
 
Цитата
Юрий М написал: А есть такие, которые знают весь функционал? )
Есть те которые думают что знают,
пока не придут на такой форум, и исключений нет, ибо все открывают для себя что-то новое и неизведанное, даже мастера.
Цитата
Андрей VG написал:
Этак можно прийти к выводу, что мне кодить ещё нельзя,
уже, Андрей, уже . Надо на тренерскую работу переходить.
По вопросам из тем форума, личку не читаю.
 
Цитата
Андрей VG написал: Забавное заключение получается.
Ключевое слово "Полезно", а не "Обязательно"

Цитата
Юрий М написал: А есть такие, которые знают весь функционал? )
Соглашусь, пусть будет не ВЕСЬ. Но Уокенбаха хотя бы почитать стоит.
No crime is so great as daring to Excel. (Winston Churchill)
 
Цитата
Maruf написал:
Но Уокенбаха хотя бы почитать стоит
иногда достаточно начать со справки :-)
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал: Надо на тренерскую работу переходить.
Напишите книжку "Продвинутые методы программирования на VBA". Для тех, кто пришел не из программистов. Про массивы, словари, коллекции, FSO, ADO, соединения с БД, работа по расписанию и т.п. Все что реально может вывести офисную работу на новый уровень - скоростные/лаконичные обработки. С подробным объяснением кодов. Думаю спрос будет - я бы точно купил. У того же Уокенбаха многое оторвано от жизни, да и тяжело читать книгу в 900 страниц, в которой напичкано всего.
 
Для меня практически любая программа Андрея (см. #10) - эталон продуманности, алгоритмического изящества и стиля (красиво написал :) )
Замечательные учебные материалы у Дмитрия Щербакова на сайте и у "владельца" нашей Планеты.
Ну и, разумеется, читаем и перечитываем классику сообщения ZVI.

"Формулисты" - виртуозы в этой теме уже отметились (частично).
Изменено: sokol92 - 06.02.2019 17:38:15
Владимир
 
Цитата
sokol92 написал:
"Формулисты" - виртуозы в этой теме уже отметились (частично).
так они не кодят, они формулируют :-) . Некоторые учиняют формульные безобразия :-)
Изменено: БМВ - 06.02.2019 17:52:25
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх