Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2016, 21:44   #11
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Цитата:
Сообщение от Gregor Посмотреть сообщение
а что думаете по поводу нигде неиспользуемых функций и классов?
Закомментируй, потом видно будет.

Цитата:
Сообщение от Gregor Посмотреть сообщение
Вот вспомнил книжку Макконнелла «Совершенный код» стр 169. как раз про это
Если ты единственный в команде, кто читает такую литературу, то нафиг такую команду.
ds.Dante вне форума Ответить с цитированием
Старый 26.01.2016, 21:45   #12
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
чем в твоем случае обусловлен префикс A в параметре функций?
В Дельфях А многие используют в параметрах (типа Argument видимо) потому что имена не регистрозависимы и часто нет других вариантов например когда есть свойство в классе с таким именем. (в C# обычно свойства UpperCase, а параметры lowerCase)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 26.01.2016 в 21:47.
Alex11223 вне форума Ответить с цитированием
Старый 26.01.2016, 21:52   #13
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
чем в твоем случае обусловлен префикс A в параметре функций? я раньше тоже так делал что бы отличить параметры от локальных переменных
Именно так!
Цитата:
но пришлось принять правила команды.
Переходи в мою команду. Как тебе мой кодЪ? В глазах не рябит? Читабельно?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 26.01.2016, 22:05   #14
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

Читабельно! Очень даже. Как связаться?
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 26.01.2016, 22:06   #15
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Как связаться?
с кем?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 26.01.2016, 22:12   #16
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Именно так!

Переходи в мою команду.
Это как понимать? )
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 26.01.2016, 22:14   #17
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Это как понимать? )
про команду - шутка.
я всегда работаю один.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 26.01.2016, 23:27   #18
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
могу показать, как пишу код я. Вдруг понравится?
Посмотрел я код. Красиво и понятно оформлено, мне нравится. Я его пробежал по диагонали и понял, что я даже хеллоувордщиком, наверное, не являюсь. Хотя...

Можно я немного позадаю вопросов и покритикую, именно оформление и форматирование, а не логику?

На чём остановился взгляд.
Код:
if AAutoAppend      // добавление в конец списка,
             then begin
                    Add(Result); // если надо
                    FModified:= True; // todo: перекрыть методы Add, Insert, Delete и т.п. ???
                  end;
Я бы всё-таки советовал (у меня это вошло уже в привычку) использовать скобки (в данном случае begin/end) именно в египетском стиле. То есть,
Код:
if condition then begin

  for i:=start to finish do begin

    while someState do begin
    end;
    
  end;

end;
Потом, у тебя идентификаторы (я говорю не о тех, к которым применена венгерская нотация) начинаются с большой буквы. Я понимаю, есть разные варианты записи имён идентификаторов, но если ты используешь camelCase, то начинать следует с малой буквы.

Далее:
Код:
if (AOperation in MEMORY_WRITE_OPERATIONS) and Assigned(pmcci) and pmcci.InitByZeroes
             then TMemoryCommand(Result).ZeroItems();
Об этом gunSmoker писал. Если условие составное, и его запись достаточно длинная, то условие стоит разбивать на несколько строк, каждая их которых заканчивается обозначениям логической операции. В твоём случае код выглядел бы так:
Код:
if (AOperation in MEMORY_WRITE_OPERATIONS) and
   Assigned(pmcci) and pmcci.InitByZeroes then begin

    TMemoryCommand(Result).ZeroItems();

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

Далее:
Код:
function TCommandQueue.GetEmpty: Boolean;
begin
  Result:= Count = 0;
end;
По-моему мнению, имена методов следует выбирать таким образом, чтобы оно формировало фразу, связанную с действием/результатом метода.
Например, метод, который получает простых чисел, я бы назвал getPrimeNumbersAmount (get - получить).
Метод, который сбрасывает состояние некоторых объектов по умолчанию, я бы назвал resetToDefault.

Также и с логическими методами (как у тебя). Из название должно представлять собой утверждение (или вопрос), которое может быть как ИСТИННЫМ, так и ЛОЖНЫМ (в случае с вопросом, ИСТИНА или ЛОЖЬ являются на него ответами). Например, массив, который проверяет, есть ли нули в массиве, можно назвать так: arrayHasZeros. Кстати, в коде такое будет очень красиво читаться:
Код:
if arrayHasZeros(<что-то>) then...
То есть, получаем предложение, которое записано чуть ли не на человеческом языке.

Вернёмся к твоему случаю. Я бы назвал метод: isQueueEmpty (ты же очередь проверяешь на пустоту)? То есть, "Пуста ли очередь?"
Вадим Мошев вне форума Ответить с цитированием
Старый 27.01.2016, 05:53   #19
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
могу показать, как пишу код я. Вдруг понравится?
Одобрямс, только я еще визуально функции слешеками друг от друга отделяю - и смотрится красиво и искать быстрей.
Цитата:
Кстати, я бы рекомендовал использовать составной оператор всегда, даже если внутри всего один оператор.
Угум, хоть цикл, хоть условие даже с одним оператором и одной ветвью - всегда оформляю begin-end.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 27.01.2016 в 05:56.
Utkin вне форума Ответить с цитированием
Старый 27.01.2016, 08:56   #20
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Я бы всё-таки советовал (у меня это вошло уже в привычку) использовать скобки (в данном случае begin/end) именно в египетском стиле.
Ну, а я вот именно так пишу. Почему так сложилось - не помню, но привык с самого начала 90х годов так писать.

Цитата:
но если ты используешь camelCase, то начинать следует с малой буквы.
Не знаю, что такое camelCase, но я стараюсь выбирать имена идентификаторов примерно так (но не всегда):
* константы - ЗАГЛАВНЫМИ;
* локальные переменные:
- все строчные, если одно слово (temp, lines и т.п.), или с заглавной (реже, в зависимости от контекста, погоды на марсе, фазы Луны и т.п.);
- из нескольких слов - всегда каждое с заглавной (локальные переменные с такими именами применяю редко, только по необходимости);
- никогда (!!!) не использую однобуквенные идентификаторы, даже параметры циклов и индексы массивов именую Index или idx. Настоятельно советую делать также.
* типы/классы - естественно с буквы "Т";
* формальные параметры - с буквы "А" (в большинстве случаев);
* поля записей и классов - с буквы "F";
* поля-ссылки на внешние объекты - с буквы "L" (придумал недавно);
Код:
function TCommandList.SaveAs: Boolean;
begin
  { "L" ---> } LSaveDialog.FileName:= FFileName;
  Result:= LSaveDialog.Execute() and SaveToFile(LSaveDialog.FileName);
  if Result
    then LSaveDialog.InitialDir:= ExtractFileDir(LSaveDialog.FileName);
end;
Часто юзаю директиву "out" вместо "var", чтобы отличать write-only-параметры.
Если можно хоть что-то вернуть из метода - всегда пишу функцию! Чтобы можно было подставлять её вызов в условие для "if", "while", "until" и т.п.

Глобальные переменные использую ТОЛЬКО ТАМ, где без них будет сильно хуже.

Цитата:
Об этом gunSmoker писал. Если условие составное, и его запись достаточно длинная, то условие стоит разбивать на несколько строк, каждая их которых заканчивается обозначениям логической операции.
У меня монитор большой.
Это у меня не очень длинное условие. Когда больше - конечно дроблю построчно.

Цитата:
Далее:
Код:
function TCommandQueue.GetEmpty: Boolean;
begin
  Result:= Count = 0;
end;
По-моему мнению, имена методов следует выбирать таким образом, чтобы оно формировало фразу, связанную с действием/результатом метода.
Вверно. Но здесь это метод-геттер для свойства:
Код:
  TCommandQueue = class(TList<TEthernetCommand>)
  private
    function GetEmpty: Boolean; // <--- геттер
  public
    procedure InsertForward(AItem: TEthernetCommand);
    property Empty: Boolean read GetEmpty; // <--- свойство
  end;

В любом случае, я свой стиль никому не навязываю. За тобой выбор - можешь перенять частично или писать, как тебе больше нравится.



Админам предлагаю создать раздел типа "кладовка папы карло", где постоянно будут жить и пополняться тематические модули (u*Utils.pas) со вспомогательными функциями/классами внутри. Например:
Код:
uRegistryUtils.pas
uWinSockUtils.pas
uXmlUtils.pas
uPrintUtils.pas
uCanvasUtils.pas
uStringUtils.pas
uHtmlUtils.pas
284940.png
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 27.01.2016 в 09:17.
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компиляцию кода MAtlab в C++Builder и использование преобразованного кода .м в C++Builder Leg1oner C++ Builder 0 07.01.2014 18:15
Автоформатирование кода с++? TwiX Свободное общение 6 28.09.2011 17:52
Распознавание Аски кода и скан кода MyLastHit Общие вопросы Delphi 8 06.12.2010 18:34
Улучшение кода Rusl92 Помощь студентам 4 23.09.2010 19:15
Выдернуть куски кода из html-кода trafbite Помощь студентам 7 18.08.2007 13:51