Применение With ... End With

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Re: Применение With ... End With

Сообщение Zenitchik » 26.07.2011 (Вт) 9:18

ark
Пример хороший, не подтверждающий моё утверждение, но и не опровергающий.
Если при вызове этой функции не практикуется использование имён аргументов, то совершенно всё равно, однобуквенные они или нет. Человек, определивший функцию, и, следовательно, знающий её спецификацию, в аргументах не запутается.
Если же имена аргументов используются, то пример автоматически выходит из под определения "переменная используется только в ограниченном фрагменте кода, и этот фрагмент кода можно охватить одним взглядом".

Antonariy
Магические константы тоже бывают уместны, если они используются однократно, и их использование в нескольких местах не предполагается логикой программы.
Знание английского языка - затрудняет понимание кода

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Применение With ... End With

Сообщение ger_kar » 26.07.2011 (Вт) 9:33

Zenitchik писал(а):Сугубо ИМХО, если некая переменная используется только в ограниченном фрагменте кода, и этот фрагмент кода можно охватить одним взглядом - такая переменная ОБЯЗАНА быть однобуквенной.

Zenitchik писал(а):Если же имена аргументов используются, то пример автоматически выходит из под определения "переменная используется только в ограниченном фрагменте кода, и этот фрагмент кода можно охватить одним взглядом".
Я с этим вполне согласен, единственное мне не нравиться слово ОБЯЗАНА в первой цитате, гораздо более уместно смотрелась бы фраза ВПОЛНЕ МОЖЕТ БЫТЬ.
Последний раз редактировалось ger_kar 26.07.2011 (Вт) 9:51, всего редактировалось 1 раз.
Бороться и искать, найти и перепрятать

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Re: Применение With ... End With

Сообщение Zenitchik » 26.07.2011 (Вт) 9:39

Действительно, "ОБЯЗАНА" - слишком сурово. Кроме того, случается, что нужна двубуквенная.
Скажем так, "рекомендуется, по соображениям улучшения читаемости кода", при этом к выбору буквы для переменной следует подходить с учётом традиций целевой области (физики, математики, ...), либо исторически сложившихся в программировании.
Знание английского языка - затрудняет понимание кода

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Применение With ... End With

Сообщение ark » 26.07.2011 (Вт) 9:45

Zenitchik писал(а):Пример хороший, не подтверждающий моё утверждение, но и не опровергающий

Пример показывает, что однобуквенные имена не несут практически никакой информации. В "затипизированоом" Си или в даже "недотипизированном" Дельфи проще:
HANDLE a;
HBITMAP b;
FileAttributes c;

На VB строка
Dim a As Long, b As Long, c As Long
ничего Вам не скажет, и через месяц, вернувшись в этот "ограниченный фрагмент", Вы будете вынуждены елозить его "вправо-вниз-наискосок", чтобы вспомнить, что, собственно, есть a,b,c.
ЗЫ: А вообще, ИМХО, конструкция типа
Код: Выделить всё
With Obj1,Obj2,Obj3
   .X = ..X
   ..Y = ...Z
End With   

Вполне даже ничего смотрится. Надо Билли идею продать. :)

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Применение With ... End With

Сообщение ark » 26.07.2011 (Вт) 9:57

Zenitchik писал(а):Магические константы тоже бывают уместны

Ну, скажем так "неприличны", что ли. В коде таки "правила хорошего тона" подразумевают объявление констант. А вот в статье, где эта самая "магическая" константа появляется только в примере вызова функции, да к тому же несколькими строками выше описываются все её составляющие - почему нет?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Применение With ... End With

Сообщение ger_kar » 26.07.2011 (Вт) 9:59

ark писал(а):Вполне даже ничего смотрится. Надо Билли идею продать.
Смотрится классно, мой вариант с цифрами даже в пыль не попадает ;) , проблема в том, что это всего лишь смотрится, а вот если бы еще и работало...
Так что пока буду юзать свой вариант, смотриться конечно не так шикарно, но тоже ничего ;) Причем не вносит никакой путаницы.
ark писал(а):Dim a As Long, b As Long, c As Long ничего Вам не скажет
Ну в таком виде конечно да, а что касается моего примера все вполне понятно.
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Применение With ... End With

Сообщение ger_kar » 26.07.2011 (Вт) 10:06

ark писал(а):А вот в статье, где эта самая "магическая" константа появляется только в примере вызова функции, да к тому же несколькими строками выше описываются все её составляющие - почему нет?

Вот кусочек моего кода - тоже вроде все понятно, поэтому, в таких случаях я позволяю себе при вызове функции применять волшебные константы:
Код: Выделить всё
Private Declare Function CreatePipe Lib "kernel32" _
        (phReadPipe As Long, phWritePipe As Long, _
         lpPipeAttributes As Any, ByVal nSize As Long) As Long
        'phReadPipe As Long         - дескриптор выходного конца канала
        'phWritePipe As Long        - дескриптор входного конца канала
        'lpPipeAttributes As SECURITY_ATTRIBUTES  - атрибуты
        'ByVal nSize As Long        - размер буфера (0& - размер по умолчанию)

Хотя после высказываний профи, мне это делать уже не так хочется, как раньше. Однако воспитание ...
Бороться и искать, найти и перепрятать

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Применение With ... End With

Сообщение Antonariy » 26.07.2011 (Вт) 10:16

Zenitchik писал(а):Antonariy
Магические константы тоже бывают уместны, если они используются однократно, и их использование в нескольких местах не предполагается логикой программы.
Вот пример, выполняющий твои требования:
Код: Выделить всё
    Public ReadOnly Property RecordCount() As Integer
        Get
            On Error GoTo RecordCount_err
            RecordCount = mRS.RecordCount
            Exit Property
RecordCount_err:
            Dim et As clsErrors.ErrorType
            If Err.Number = -2147467259 Then
                et = clsErrors.ErrorType.ertAdmin
            Else
                et = clsErrors.ErrorType.ertSystem
            End If
            mEngine.Errors.AddItem(et, Err.Number, Err.Description, OBJ_NAME, "RecordCount")
        End Get
    End Property

Раскрой его смысл.
Лучший способ понять что-то самому — объяснить это другому.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Применение With ... End With

Сообщение ark » 26.07.2011 (Вт) 10:45

Antonariy писал(а):-2147467259

А в хексах она гораздо ... понятнее :wink:
Не знаю тайный смысл .ertAdmin и .ertSystem - 0х80004005 может и туда, и сюда попасть.
Кстати, а почему не Try? :shock:

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Применение With ... End With

Сообщение Antonariy » 26.07.2011 (Вт) 11:01

А в хексах она гораздо ... понятнее
А без помощи калькуляторов и интернетов? Или если таких уникальных нигде больше не использованных и не комментированных констант рассыпано over 9000 по всему исходнику?
Не знаю тайный смысл .ertAdmin и .ertSystem
Первое — как бы информационное сообщение, второе — сообщение об ошибке. Но это не важно.
Кстати, а почему не Try?
Потому что конвертировалось из VB6.
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Применение With ... End With

Сообщение Antonariy » 26.07.2011 (Вт) 11:11

ger_kar писал(а):
ark писал(а):А вот в статье, где эта самая "магическая" константа появляется только в примере вызова функции, да к тому же несколькими строками выше описываются все её составляющие - почему нет?

Вот кусочек моего кода - тоже вроде все понятно, поэтому, в таких случаях я позволяю себе при вызове функции применять волшебные константы:
Код: Выделить всё
Private Declare Function CreatePipe Lib "kernel32" _
        (phReadPipe As Long, phWritePipe As Long, _
         lpPipeAttributes As Any, ByVal nSize As Long) As Long
        'phReadPipe As Long         - дескриптор выходного конца канала
        'phWritePipe As Long        - дескриптор входного конца канала
        'lpPipeAttributes As SECURITY_ATTRIBUTES  - атрибуты
        'ByVal nSize As Long        - размер буфера (0& - размер по умолчанию)

Хотя после высказываний профи, мне это делать уже не так хочется, как раньше. Однако воспитание ...

Здесь нет волшебных констант.
А вот комментировать параметры стандартных api-функций как раз совершенно излишне. Ты программу пишешь, а не учебник. Тому, кто с api более-менее знаком, достаточно описания зашифрованного в самом имени, а подробная информация, если необходимо, ищется на сайте производителя.

Комментировать параметры своих функций, полей типов и т.п. это хороший тон, но это все же менее обязательно (потому что само имя может являться минимально необходимым и достаточным описанием), чем раскрытие смысла констант.
Лучший способ понять что-то самому — объяснить это другому.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Применение With ... End With

Сообщение ger_kar » 26.07.2011 (Вт) 14:47

Antonariy писал(а):А вот комментировать параметры стандартных api-функций как раз совершенно излишне.

Ну это наверное кому как удобно, я и свои комментирую (хотя и не всегда), а уж АПИ и подавно. Тем более, что комменты я пишу не сразу, а под конец процесса, таким образом, когда я расставляю коментарии, тем самым закрепляю то, что пришлось изучить, да и потом быстро пробежал взглядом и все понятно, и не надо никуда лезть, особенно на сайт производителя ибо уже все под рукой. Таким образом обычно справку и примеры я ищу в случае изучения чего-то нового.
Бороться и искать, найти и перепрятать

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Применение With ... End With

Сообщение Antonariy » 26.07.2011 (Вт) 15:17

Ну это наверное кому как удобно
Для меня это вопрос потраченного времени, а не удобства.
тем самым закрепляю то, что пришлось изучить
Если ты пишешь за деньги, а не ради обучения, то такая привычка снизит твой заработок.
да и потом быстро пробежал взглядом и все понятно, и не надо никуда лезть, особенно на сайт производителя ибо уже все под рукой
Под рукой оказывается работающий код, который известно как работает. Неужели без этих комментариев ты сразу забудешь его смысл?
Лучший способ понять что-то самому — объяснить это другому.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Применение With ... End With

Сообщение ger_kar » 26.07.2011 (Вт) 18:02

Antonariy писал(а):Если ты пишешь за деньги, а не ради обучения, то такая привычка снизит твой заработок.
Пока только обучение в основном на поделках предназначенных для собственного употребления. Так что написание комментариев на мой заработок никак не влияют. Но к мнению профи я всегда прислушиваюсь.
Antonariy писал(а):Под рукой оказывается работающий код, который известно как работает. Неужели без этих комментариев ты сразу забудешь его смысл?
Пока еще не забывал, но и больших проектов тоже никаких не сотворил, в основном из под моей руки выходят только вот такие поделки. Даже не знаю сильно кривой код я сочиняю или нет, самому интересно узнать :)
Вложения
PINGER.rar
(143.11 Кб) Скачиваний: 52
Бороться и искать, найти и перепрятать

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Применение With ... End With

Сообщение Antonariy » 26.07.2011 (Вт) 19:50

С эстетической точки зрения в коде придраться не к чему. :)
С других точек зрения — код по работе с реестром дублирован в Win_API_Reestr и frmAbout. Было бы хорошо познакомить программу с манифестом. И текстовочку в frmAbout сделать более user-friendly.
Лучший способ понять что-то самому — объяснить это другому.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Применение With ... End With

Сообщение ger_kar » 26.07.2011 (Вт) 20:24

Antonariy писал(а):С других точек зрения — код по работе с реестром дублирован в Win_API_Reestr и frmAbout
Зря я воспользовался конструктором :) frmAbout - это работа мастера, я туда вставил только свои надписи и все. А что она там делает даже не вникал, а получилась лажа :) Надо было не полениться и самому сочинить.
Antonariy писал(а):Было бы хорошо познакомить программу с манифестом.
Кто такой манифест не разу не знаю :) . Пошел читать ;) Узнаю, тогда и подружу, а заодно и текст подправлю.
Спасибо за советы.
Бороться и искать, найти и перепрятать

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Re: Применение With ... End With

Сообщение Zenitchik » 27.07.2011 (Ср) 10:12

arc
и через месяц, вернувшись в этот "ограниченный фрагмент", Вы будете вынуждены елозить его "вправо-вниз-наискосок", чтобы вспомнить, что, собственно, есть a,b,c.

Невнимательно читаете.
Zenitchik писал(а):некая переменная используется только в ограниченном фрагменте кода, и этот фрагмент кода можно охватить одним взглядом

возможность охватить фрагмент кода одним взглядом означает, что елозанье "вправо-вниз-наискосок" занимает секунды и не требует существенных трудозатрат.
Для меня верхним пределом такого фрагмента являются 7-10 строк, в зависимости от плотности кода.

Antonariy
Контрпример принят. Я был не прав.
Область применимости "магических констант" более узка, чем я думал, и ограничивается некоторыми случаями побитовой логики, когда назначение констант очевидно по их структуре.
Знание английского языка - затрудняет понимание кода

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 46

    TopList