Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Библиотеки для STM32
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2, 3, 4, 5, 6, 7, 8
Velund
QUOTE (Genadi Zawidowski @ Mar 15 2017, 01:28) *
И писал для него примеры кода с русскими комментариями... Не удалось, но к русскому привык.


Я русские комментарии не признаю в принципе. Щелкать регистром постоянно меня выводит из себя. Так что комментарии английские, англоязычных не выворачивает, некоторые из коллег в свое время путались делать кислое лицо - но проблемы индейцев шерифа не волнуют. wink.gif
ViKo
Поделитесь примером с комментариями на английском, который не стыдно показать.
Velund
QUOTE (ViKo @ Mar 27 2017, 07:11) *
Поделитесь примером с комментариями на английском, который не стыдно показать.


Не знаю, какой в этом смысл, но вот - хватанул с экрана что было в окне редактора... wink.gif

CODE
  for (;;)         // Task, that caused error, will loop here forever
   {
#ifndef DEBUG
       if (!(SysFlags & SYSF_OSStarted)) VdHitWd(wd);
#endif

     UpdLEDs ();
         t2 = _SET_TIMEOUT(100);         // 100 ms delay
         while (!(_CHK_TIMEOUT(t2))) {}

         if (_CHK_TIMEOUT(t))            // Check if timeout expired
          {
            SysFlags |= SYSF_ResetReq;   // Set restart request flag
            t = _SET_TIMEOUT(3000);      // Allow 3 sec for graceful termination of other tasks
            while (!(_CHK_TIMEOUT(t))) {}
            GSMPower(0);                 // Turn modem off
            if (GenCnf.dat.DSLflags & DSMF_Enable)
            {
              Slv_SleepCmd (SLAVE_ADDR, 3600, 0x01, &err);
              t = _SET_TIMEOUT(3000);    // Delay 3 sec
              while (!(_CHK_TIMEOUT(t))) {}  // (actually, power will be shut down during this delay)
              // If we pass here, something went really wrong. Reboot anyway.  
              reboot();                   // Reset unit, if wasn't done already by other task
            }              
            else
              reboot();                   // Reset unit, if wasn't done already by other task
          }
    }

}

//////////////////////////////////////////////////////////////////////////

Эдди
Что-то у вас излишне комментариев. Например, зачем комментировать очевидное — паузы?
Шаманъ
Цитата(Эдди @ Mar 28 2017, 08:00) *
Что-то у вас излишне комментариев. Например, зачем комментировать очевидное — паузы?

Комментариев мало не бывает wink.gif
jcxz
Цитата(Эдди @ Mar 28 2017, 07:00) *
Что-то у вас излишне комментариев. Например, зачем комментировать очевидное — паузы?

Ну может человеку оплата начисляется на килобайты biggrin.gif
Такие "комментарии" только ухудшают читаемость проекта. Код должен быть по возможности самокомментируемым, а то что невозможно понять по коду, то только это и должно комментировать. Имха!
Obam
"…зачем комментировать очевидное — паузы?…"

А для чего эта пауза? Очевидно? Не думаю… (;
Сергей Борщ
QUOTE (Obam @ Mar 28 2017, 09:44) *
А для чего эта пауза? Очевидно? Не думаю… (;
Согласен. Комментарий есть, но толку от него никакого потому что описывает то, что и так предельно понятно из кода.
Эдди
Цитата(Obam @ Mar 28 2017, 10:44) *
А для чего эта пауза? Очевидно? Не думаю… (;

Во-во. Правильней было бы объяснить, на кой черт она вообще нужна!
Baser
Цитата(Эдди @ Mar 28 2017, 08:00) *
Например, зачем комментировать очевидное — паузы?

У меня такие комментарии частенько бывают. По двум причинам.
1. Частенько лень писать спец. макрос и число в коде не явно описывает реальное время задержки.
2. Как выше в примере - число реальное, а единицы измерений неизвестно какие (мкс, мс, сек ??)
А через год нужно подкрутить код - и ищи концы по проекту. А так - комментарий присутствует sm.gif
Эдди
Ну, я стараюсь только неочевидные вещи комментировать + для себя кой-какие заметки на будущее делать, вроде такого.
Obam
Цитата(Baser @ Mar 28 2017, 14:14) *
2. Как выше в примере - число реальное, а единицы измерений неизвестно какие (мкс, мс, сек ??)
А через год нужно подкрутить код - и ищи концы по проекту. А так - комментарий присутствует sm.gif


Дарю:
#define _RTTPrsclr_15ms (480u)

#define _RTT_30ms (2)// по _RTT_15ms_Tick
#define _RTT_250ms (17)// по _RTT_15ms_Tick
#define _RTT_300ms (20)// по _RTT_15ms_Tick

PAUSE (_RTT_1500ms);

Как показывает опыт, экономить на топтании клавы не стОит. (:
juvf
есть такое...... хороший код в коментариях не нуждается.
у Genadi Zawidowski скорее не комментарии, а референс мануал на его API.

У Velund пустые, не нужные комментарии.... типа таких
Код
int a = 10; //создал переменную а, задал ей значение 10


Цитата(Baser @ Mar 28 2017, 15:14) *
2. Как выше в примере - число реальное, а единицы измерений неизвестно какие (мкс, мс, сек ??)
А через год нужно подкрутить код - и ищи концы по проекту. А так - комментарий присутствует sm.gif
Для этого не нужны комментарии, нужны правильные имена.
Код
t2 = _SET_TIMEOUT_MS(100);

GSMPower(0); - такой вызов без комментариев не очевиден
GSMPower(OFF), GsmModemPowerOff() или GsmModemOff() не нуждается в комментариях.

ps чужой код всегда плох. у каждого свой стиль, и только он true. Все остальное говнокод неправильное
Alechek
Цитата(Шаманъ @ Mar 28 2017, 12:05) *
Комментариев мало не бывает wink.gif

И то правда.
Порой не хочется читать код, а просто прочитать по-русски, что же тут хотели сделать.
Бывает так, что комментарий верный, а вот в коде ошибка закралась....

Я, бывает, вначале комментариями пишу, что должно делаться, а потом уже эту последовательность последовательно превращааю в код.
Так как когда код уже написан, и в текущий момент времени понят тобой на 120%, то необходимость в комментариях (особенно развернутых) в этот момент вообще никак не очевидна.

Цитата(juvf @ Mar 29 2017, 09:54) *
GSMPower(0); - такой вызов без комментариев не очевиден
GSMPower(OFF), GsmModemPowerOff() или GsmModemOff() не нуждается в комментариях.


ИМХО, правильнее комментирование целого куска:

/* Выключаем модем правильно, см. ****pdf, 2.3.4 Power Down Cycle */
GSMPowerKey(1);
Delay(2000);
GSMPowerKey(1);
Delay(8000);
GSMPower(0);

ViKo
Моё.
CODE

/*!****************************************************************************
@brief Voltage Battery conversion & check
@note Однократное преобразование напряжения литиевой батареи
@note Temp.sensor, VRefint измеряются перед VBat/2
*/
uint32_t Bat_check(void)
{
/* Сначала запустить и дождаться преобразования инжектированных каналов
2 * (480 + 12 cycles) : 32.8 us
Заодно сработает прерывание от ADC3 - проверка уровня заряда аккумулятора
Сбросить бит окончания преобразования инжектированных каналов */
ADC1->CR2 |= ADC_CR2_JSWSTART;
ADC3->CR2 |= ADC_CR2_JSWSTART;

while (!(ADC1->SR & ADC_SR_JEOC)) { }
ADC1->SR &= ~ADC_SR_JEOC;

/* Разрешить делитель напряжения батареи
Задержка для включения не нужна */
ADC->CCR |= ADC_CCR_VBATE;

/* Старт регулярного канала преобразования
Ожидать окончание преобразования, 480 + 12 cycles : 16.4 us */
ADC1->CR2 |= ADC_CR2_SWSTART;
while (!(ADC1->SR & ADC_SR_EOC)) { }

/* Запретить делитель напряжения батареи */
ADC->CCR &= ~ADC_CCR_VBATE;

/* Прочитать температурный датчик и опорное напряжение */
Sensors.Temp = ADC1->JDR1;
Sensors.Ref = ADC1->JDR2;

/* Прочитать напряжение батареи (умножить на 2)
При чтении DR автоматически сбрасывается бит окончания
преобразования регулярных каналов EOC
Для перевода в мВ измеренное значение нужно преобразовать по формуле:
mV = Data * 1210 / VRefData */
uint32_t Bat = (ADC1->DR << 1) * 1210 / Sensors.Ref;

/* Округлить и уменьшить в 10 раз */
if (Bat % 10 < 5) Bat = Bat / 10;
else Bat = Bat / 10 + 1;
// NumStat1_print(Bat);

/* Проверить, укладывается ли напряжение в допустимый диапазон */
return Bat;
}

Obam
"Я, бывает, вначале комментариями пишу, что должно делаться, а потом уже эту последовательность последовательно превращааю в код."
Присоединяюсь…

"Так как когда код уже написан, и в текущий момент времени понят тобой на 120%, то необходимость в комментариях (особенно развернутых) в этот момент вообще никак не очевидна."
ОтлОжите его (этот код) не менее чем на пол-годика, займётесь каким-нибудь перпендикулярным проектом и после, вернувшись, похвАлите себя за то, что не зажмотились в "…комментариях (особенно развернутых)…"
Я гарантирую это (;
jcxz
Цитата(juvf @ Mar 29 2017, 06:54) *
У Velund пустые, не нужные комментарии.... типа таких
Код
int a = 10; //создал переменную а, задал ей значение 10

Согласен. Такие комментарии делают обратное - только ухудшают читаемость исходника, загромождая его.

Цитата(Alechek @ Mar 29 2017, 08:29) *
Порой не хочется читать код, а просто прочитать по-русски, что же тут хотели сделать.
Бывает так, что комментарий верный, а вот в коде ошибка закралась....

А бывает и наоборот.
Очень часто бывает (много раз сталкивался на практике), когда код написали вместе с комментами, а потом начали отлаживать-отлаживать-отлаживать. В результате код сильно изменился (до совершенно другого), а комменты каждый раз при отладке конечно лень менять. В результате получаем комменты не соответствующие коду, и наоборот - только вводящие в заблуждение.
Поэтому я, например, при первоначальном написании, комменты почти не пишу. А пишу их только когда исходник более-менее устаканится и заработает как надо.
Forger
Цитата(jcxz @ Mar 29 2017, 11:26) *
Поэтому я, например, при первоначальном написании, комменты почти не пишу. А пишу их только когда исходник более-менее устаканится и заработает как надо.

В свое время, чтобы не метаться между разными способами оформления кода, мне помогла соответствующая литература.
Например, много лет назад, пригодилась эта: "Веревка достаточной длины, чтобы выстрелить себе в ногу", ее легко найти в гугле.
Правда, помню, что с многими моментами я там был не очень согласен. Это мягко говоря )))
Но потом попалась в руки эта книжка: Мартин - "Чистый код".
К тому моменту она была мне очень кстати - вычитал ее запоем всю до дыр sm.gif

Кто уже плотно сидит на "плюсах" и тем более уже созрел строить полноценный объектный код, используя всю мощь "плюсов", вторую книжка будет очень полезна, по крайней мере мне она очень пригодилась.
Благодаря этой книжке мне удалось составить собственную "конвенцию именования", очень лаконичную и простую, но при этом предельно однозначную, что значительно улучшило читаемость кода:
Нажмите для просмотра прикрепленного файла

ps, Картинка не ради разведения очередного холивара, а, просто - вдруг кому-то пригодится ))
juvf
Цитата(Forger @ Mar 29 2017, 21:47) *
В свое время, чтобы не метаться между разными способами оформления кода, мне помогла соответствующая литература...
не ради разведения очередного холивара, а, просто - вдруг кому-то пригодится ))

а мне помогла небольшая шпаргалка
Forger
Цитата(juvf @ Mar 30 2017, 12:39) *
а мне помогла небольшая шпаргалка

Прям с языка сняли!!! sm.gif

Правда с некоторыми пунктами я не очень согласен, в частности с теми, которые имеют приписку "Это правило пришло из математики...".
Предпочитаю математику (да и не только математику, но и другие дисциплины) с ее короткими и малоинформативными именами и именами в коде не смешивать, не путать "мух с колетами" sm.gif
Скажем "скорость" называть не 'v', а как положено - velocity, т. е. в данных случаях сокращения, пришедшие из фундаментальных вековых дисциплин, могут сильно усложнить чтение кода.
Дело в том, что в те далекие времена английский не был, можно сказать, "всемирным" языком, и потому чаще всего использовались лишь сокращения от латинских названий терминов,
К тому же практически все писалось от руки.
Но те времена уже давно прошли, поэтому я лично не вижу никакого смысла цепляться за них в коде.

Например, вместо "i" использую переменную, носящую конкретный смысл для кода, где она используется: index, iterarator, value ..., составные: itemIndex, objectIterator и и т.п.
Но в примитивных случаях (скажем, цикл из одной строки), "классическое i" вполне сгодится, иначе увеличивается сложность чтения кода.

Для отладки полноценные имена (в том числи и счетчики циклов, итераторы и т. п.) тоже очень полезны - в окне watch переменные несут явный и однозначный смысл.
Разумеется, при условии, что переменные и объекты названы правильно sm.gif

Вообще, мне кажется, что самое сложный, но и самый полезный навык в программировании - умение правильно подбирать "сущностям" и "действиям" однозначные и лаконичные имена ....
Alechek
Цитата(Forger @ Mar 29 2017, 21:47) *
Благодаря этой книжке мне удалось составить собственную "конвенцию именования", очень лаконичную и простую, но при этом предельно однозначную, что значительно улучшило читаемость кода:

Если уж пошла такая пьянка по поводу стилей, то при переходе на C++ я решил придерживаться

https://google.github.io/styleguide/cppguide.html
Forger
Цитата(Alechek @ Apr 1 2017, 09:37) *
Если уж пошла такая пьянка по поводу стилей, то при переходе на C++ я решил придерживаться

А почему лишь C++?
Я вот использую единые принципы именования и структурирования не только в С/С++ коде, но и в других языках, средах, CAD-ах и т. п.
Например, очень удобно писать код для МК, если цепи на схеме (AD) названы таким образом, что позволяет в коде использовать точно такие же имена для пинов.
zltigo
Цитата(jcxz @ Mar 29 2017, 11:26) *
Очень часто бывает (много раз сталкивался на практике), когда код написали вместе с комментами, а потом начали отлаживать-отлаживать-отлаживать. В результате код сильно изменился (до совершенно другого), а комменты каждый раз при отладке конечно лень менять. В результате получаем комменты не соответствующие коду, и наоборот - только вводящие в заблуждение.

Очень, очень массовое явление sad.gif. Особенно убивает, когда комментарий провильный, а то, что в исходнике с ошибкой.
Цитата
Поэтому я, например, при первоначальном написании, комменты почти не пишу. А пишу их только когда исходник более-менее устаканится и заработает как надо.

Именно так. Причем такое комментирование прекрасно совмещается с общей вычиткой и оптимизацией исходника.
Aaron
Цитата(juvf @ Mar 30 2017, 12:39) *
а мне помогла небольшая шпаргалка


Блин, товарищи, поздновато выложили sm.gif Как раз сейчас разродился наконец оформить требования к стилю кодирования в своём отделе, уже написал почти sm.gif Но всё равно подглядеть чужие готовые рекомендации незазорно, чтобы ничего не упустить!
Forger
Цитата(Aaron @ Apr 3 2017, 11:55) *
Как раз сейчас разродился наконец оформить требования к стилю кодирования в своём отделе, уже написал почти
Я для своего отдела тоже задавался подобной целью, курил интернеты, читал соотв. книжки, но не прижилось в том виде, как я хотел.
Полагаю, что причина в том, что каждый работник тянет свои проекты в одиночку.
Проекты относительно небольшие, команда не требуется.
Поэтому каждый "ваяет" как пожелает.
Главное - положительный результат на выходе )))
Kabdim
+1 за гугльстайл. Самый вменяемый стайлгайд на данный момент. Для любителей варианта "от создатаелей..." даже Страуструп написал тяжеловесный толмуд. А вот придумывать своё в 17 году - это жесть, ей богу.
juvf
Цитата(Kabdim @ Apr 3 2017, 14:41) *
+1 за гугльстайл. Самый вменяемый стайлгайд на данный момент.

Цитата
string table_name; // OK - uses underscore.
string tablename; // OK - all lowercase.

string tableName; // Bad - mixed case.


где уж самый вменяемый? tableName - читабельно. table_name - читабельно. tablename - не читабельно. tableName - такой стиль часто встречал. Например Qt так написан. Например переменная
bool QGuiApplication::quitOnLastWindowClosed, в гуглсайле будет так quitonlastwindowclosed - это плохо читаемо. имхо.

Forger
Цитата(juvf @ Apr 3 2017, 13:34) *
quitonlastwindowclosed - это плохо читаемо

Поддерживаю! Такой набор букв даже носители языка вряд ли прочтут без труда, остальным остается лишь по-сочувствовать ))
Kabdim
Цитата(juvf @ Apr 3 2017, 13:34) *
tablename - не читабельно

Как по мне так вполне читабельно, особенно если это не просто два слова, а постоянно используемые в такой связке два слова. Рекомендаций называть переменную предложением, а потом записывать её имя без подчеркиваний там нет.

А по поводу вашего примера: bool QGuiApplication::quitOnLastWindowClosed - не переменная, а property. В гугльстайле вы модификаторы property можете называть как переменную, но это не требуется. Т.е. когда имя property - предложение, очевидно её удобней называть Camal case'ом, что стайл вполне позволяет.
Forger
Цитата(Kabdim @ Apr 3 2017, 15:58) *
Как по мне так вполне читабельно, особенно если это не просто два слова, а постоянно используемые в такой связке два слова.

Полагаю, что если жить только с гуглекодом и изучать/пользовать/читать только гуглепроеты с утра до вечера, то постепенно привыкаешь и подсаживаешься rolleyes.gif
Однако, если пройдет какое-то время (перерыв), то придется заново вкуривать в этот код, потратив некоторое время на повторное привыкание.

Существуют книги, написанные так, что читаются на одном дыхании - как бежишь под ровной дороге,
но попадаются такие, что "спотыкаешься" на каждом слове, словно бежишь через непролазный лес.
Гуглестиль, имхо, больше относится ко второму, нежели к первому )))
Aaron
К чему холивар, Kabdim? Главное не инструмент (коих много), а цель - достичь переносимости и поддерживаемости кода в команде. Если тебе инструмент не подходит - ты берёшь другой, или делаешь удобный, под себя.
Цитата
А вот придумывать своё в 17 году - это жесть, ей богу.

В чём именно жесть? Скомпилировать несколько трудов, взять из них лучшее, вычеркнуть неудачное и лишнее, скомпоновать - это здорово!
Между прочим, разработчики крупных проектов не стесняются внедрять свои собственные правила, поищите JPL C Coding Standard, CERN C++ Coding Standard
ГуглоСтайл как по мне, не совсем торт. Аналогично как и КьютСтайл. Выше уже высказались.
Kabdim
Извиняюсь, если мои посты вызвали ощущение холивара, его там нет.
Мой поинт в том что пользы от унификации для большинства команд и проектов больше чем от кастомизации. Т.е. если взять популярный codestyle можно во-первых не набивать свои шишки на неочевидных вещах, во-вторых читать сторонний код в этом codestyle как свой/вносить правки не перестраивая свой мозг лишний раз. А различных крупных codestyle'ов много, можно выбрать то что ближе.
Крупные проекты очевидно являются исключением, т.к. их крупность позволяет авторам таких проектов создать тонко настроенные инструменты под свои задачи. И при этом затраты на разработку и переучивание программистов будут ниже чем польза.
Forger
Цитата(Kabdim @ Apr 3 2017, 18:39) *
И при этом затраты на разработку и переучивание программистов будут ниже чем польза.

Затраты на переучивание? Не смешите ))) Если программер не умеет читать чужой код, то его бесполезно переучивать smile3046.gif

Дело тут в другом - крайне затратно вынуждать опытного программиста писать и отлаживать свой код в стиле чужого кривого кода, к тому же далеко не каждый профи на это подпишется.
Kabdim
Цитата(Forger @ Apr 3 2017, 18:44) *
Затраты на переучивание? Не смешите ))) Если программер не умеет читать чужой код, то его бесполезно переучивать

Выходит codestyle вообще не нужен?
Цитата(Forger @ Apr 3 2017, 18:44) *
Дело тут в другом - крайне затратно вынуждать опытного программиста писать и отлаживать свой код в стиле чужого кривого кода, к тому же далеко не каждый профи на это подпишется.

Не понял, вы другими словами повторил то что я сказал, но при этом возразили. sm.gif
Forger
Цитата(Kabdim @ Apr 3 2017, 18:51) *
Выходит codestyle вообще не нужен?

Конечно, дисциплина в коде и документации нужна!
Но только в том случае, если она ориентирована под максимальное кол-во народу, а не под уникальных мега-ботанов, которые сходу способны читать такие названия правильно:
Код
quitonlastwindowclosed
sm.gif

Цитата
Не понял, вы другими словами повторил то что я сказал, но при этом возразили. sm.gif

Повторюсь: "крайне затратно вынуждать опытного программиста писать и отлаживать свой код в стиле чужого кривого кода".
Под словом "кривой" я подразумеваю код, реализованный в "кривом" стиле, который выдуман "с потолка", в стиле "изобретаем велосипед".
Kabdim
Цитата(Forger @ Apr 3 2017, 18:58) *
Нужен, если он создан под максимальное кол-во народу, а не под уникальных мега-ботанов sm.gif

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

Цитата(Forger @ Apr 3 2017, 18:58) *
Повторюсь: "крайне затратно вынуждать опытного программиста писать и отлаживать свой код в стиле чужого кривого кода".
Под словом "кривой" я подразумеваю код, реализованный в "кривом" стиле, который выдуман "с потолка", в стиле "изобретаем велосипед".

Чем публичней и распространенней стандарт тем меньше он кривой? И наоборот чем уже сфера пользователей тем он как минимум шероховатый.
Forger
Цитата(Kabdim @ Apr 3 2017, 19:00) *
Чем публичней и распространенней стандарт тем меньше он кривой? И наоборот чем уже сфера пользователей тем он как минимум шероховатый.

Все так, это - эволюция (извиняюсь за громкое слово).
Кривой стиль и соответственно говно-код не способны эволюционировать нормально.

Но нужно отличать коммерциолизированный стандарт (скажем, гугльстайл) и обычный - "бесплатный", который можно почерпнуть из книжек.
Бесплатный эволюционирует эффективнее, он гибче и потому жизнеспособнее, нежели платный ()

Но это все же пустая дискуссия, все одно каждый останется при своем мнении и при своем стиле sm.gif
juvf
Цитата(Kabdim @ Apr 3 2017, 17:58) *
А по поводу вашего примера: bool QGuiApplication::quitOnLastWindowClosed - не переменная, а property.
А проперти - это не переменная? в с++ вообще нет проперти. проперти - это уже смысловое значение переменной или константы.

Код
Q_PROPERTY([b]bool quitOnLastWindowClosed[/b]  READ quitOnLastWindowClosed WRITE setQuitOnLastWindowClosed)
вижу тип переменной bool, имя переменной quitOnLastWindowClosed. может в с++ появилось что-то новое, появились проперти.... заглянул в ассистант, глянул что такое PROPERTY
Код
Q_PROPERTY(type name.....
ан нет... тип и имя переменной.

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

ps в довершении.... в QtCreator, и позже в Eclipse, есть автодополнение по камел кейсу. назвал переменную quitOnLastWindowClosed, в коде набираешь qol (или qOL) автодополнение предлагает все переменные начинающиеся на q и имеющие в имени большие буквы O и L. в итоге будет предложены все переменные и методы... с вероятностью в 100% будет предложена переменная quitOnLastWindowClosed (или достаточно будет набрать qO). у QString набираешь tss - автодополнение делает toStdString. Набираешь gp - выдает getPoint и getPosition. tn - выскочит tableName Т.е. камел кэйс дает подсказку для автодополнения. Это очень удобно в написании.
Kabdim
Цитата(Forger @ Apr 3 2017, 19:04) *
Но это все же пустая дискуссия, все одно каждый останется при своем мнении и при своем стиле sm.gif

Мнение, то у нас общее - стиль нужен, а вот вкусы и правда различаются. sm.gif
Цитата(juvf @ Apr 4 2017, 08:31) *
А проперти - это не переменная?

Нет, у проперти может вообще не быть представления в виде закрытой переменной.
Цитата(juvf @ Apr 4 2017, 08:31) *
в с++ вообще нет проперти.

А в QT из которого выдран пример - есть.
Цитата(juvf @ Apr 4 2017, 08:31) *
без разницы в каком стеле написано.... главное чтобы всем было понятно....

Тут я с вами безусловно согласен.
Цитата(juvf @ Apr 4 2017, 08:31) *
и не только мне не понравился гугл стайл.
ps в довершении.... в QtCreator, и позже в Eclipse, есть автодополнение по камел кейсу. назвал переменную quitOnLastWindowClosed, в коде набираешь qol (или qOL) автодополнение предлагает все переменные начинающиеся на q и имеющие в имени большие буквы O и L. в итоге будет предложены все переменные и методы... с вероятностью в 100% будет предложена переменная quitOnLastWindowClosed (или достаточно будет набрать qO). у QString набираешь tss - автодополнение делает toStdString. Набираешь gp - выдает getPoint и getPosition. tn - выскочит tableName Т.е. камел кэйс дает подсказку для автодополнения. Это очень удобно в написании.

Тут тоже частично соглашусь, но это всё же особенности конкретного автодополнения, он мог бы точно так поступать и с разделением подчеркиваниями.
juvf
Цитата(Kabdim @ Apr 4 2017, 12:22) *
Тут тоже частично соглашусь, но это всё же особенности конкретного автодополнения, он мог бы точно так поступать и с разделением подчеркиваниями.

а оно работает по подчеркиванию. написал int hello_world; сохранил. в следующей строке написал hW и жамкнул ctrl+Пробел. дополнило до hello_world. я не говорю что подчеркивание не удобно, я говорю что слитно не удобно. а гугл пердлогает и слитно тоже.
zltigo
Цитата(Forger @ Apr 3 2017, 19:04) *
Но это все же пустая дискуссия, все одно каждый останется при своем мнении и при своем стиле sm.gif

Ну отчего же "останется". Лично у меня за годы стиль менялся под влияним писанного и читанного. При этом догмы в общем нет. Есть обшие тяготения, например, имена функций все явно больше маленькими буквами без разделителей, если это не группа функций. Переменные напротив все с подчеркиваними, поскольку очень люблю структуры, а для структур разделители явяются естественными. Соответственно и просто переменные смотрятся на таком фоне гармоничнее с подчеркиваниями. Заглавные буквы когда то использовал в именах струкур, но перестал за в общем то ненадобностью. Константы и константные выражения, само собой заглавными. Макросы когда то давно тоже именовал заглавными, но перестал за ненадобностью.
Не терплю органически "венгерского" стиля именования. В остальном в общем всеяден. Только трепертно отношусь к фоматировнию - любой чужой исходник с которым предстоит работать перегоняется для начала в удобный для себя формат.
Kabdim
Цитата(juvf @ Apr 4 2017, 11:25) *
я говорю что слитно не удобно

Кмк эта возможность писать слитно слишком слишком демонизируется. Этот вариант написания один из возможных, т.е. программист может выбрать его там где он будет уместен. Например isalpha, в качестве локальной переменной - почему бы и нет. А в тех местах где это не уместно предлагаются подчеркивания.
Forger
Цитата(zltigo @ Apr 4 2017, 11:54) *
При этом догмы в общем нет. Есть обшие тяготения, например, имена функций все явно больше маленькими буквами без разделителей, если это не группа функций. Переменные напротив все с подчеркиваними, поскольку очень люблю структуры, а для структур разделители явяются естественными. Соответственно и просто переменные смотрятся на таком фоне гармоничнее с подчеркиваниями. Заглавные буквы когда то использовал в именах струкур, но перестал за в общем то ненадобностью. Константы и константные выражения, само собой заглавными. Макросы когда то давно тоже именовал заглавными, но перестал за ненадобностью.

А я в свое время отказался от такого кол-ва правил и упростил все до минимума, как в книжке Мартина "Чистый код" - не люблю кучу лишних правил, их тогда приходится всегда держать в голове.
А особенно это напрягает при переписывании кода - скажем, структура переросла в класс, глобальная переменная стала локальной, поле класса стало локальной переменной, константа перестала быть таковой и наоборот.
Короче, прошел через это, поплевался и удалил кучу лишних правил. После этого все стало значительно проще.
Читаемость кода не пострадала, а даже наоборот - считаю лишним "кодировать" в названии объекта его принадлежность к определенной "рассе", другие нынче времена sm.gif
Насчет макросов тут я не буду спорить, скорее всего сам уйду на именование макросов, как обычных методов классов (функций), т. к. любой макрос может стать функцией и наоборот.
А вот замены "магических" чисел сознательно делаю большими буквами, пока что мне кажется, что это улучшает читаемость кода.
Впрочем, время покажет ))) Я тоже "эволюционирую" )))


Цитата
Не терплю органически "венгерского" стиля именования. В остальном в общем всеяден.

Аналогично! До тошнотиков не выношу, когда в название переменной с какого-то перепугу вносят ее "рассовую" принадлежность wacko.gif
Абсолютно убежден, что оооочень значительно ухудшает читаемость кода - приходится при изменении типа этой переменной ВЕЗДЕ менять ее название - "мартышкин" труд, иначе не назовешь ))


Цитата
Только трепертно отношусь к фоматировнию - любой чужой исходник с которым предстоит работать перегоняется для начала в удобный для себя формат.

Абсолютно солидарен! Чистым кодом пользоваться гораздо приятнее )))
jcxz
Цитата(Forger @ Apr 4 2017, 11:20) *
скажем, структура переросла в класс,

Это как это? wacko.gif
В чём по Вашему отличие между структурой и классом? rolleyes.gif
Aaron
очевидно же - у класса есть конструкторы/деструкторы и private/protected области видимости =)
Forger
Цитата(Kabdim @ Apr 4 2017, 11:56) *
Кмк эта возможность писать слитно слишком слишком демонизируется. Этот вариант написания один из возможных, т.е. программист может выбрать его там где он будет уместен. Например isalpha, в качестве локальной переменной - почему бы и нет.
А потому что в английском язые нет слова "isalpha", а есть два слова Is или Alpha, поэтому логичнее изменить на "isAlpha", is_alpha или IsAlpha.
Английский Язык Предусматривает Написание Каждого Слова Предложения Заглавными Буквами, а русский - нет.
Поэтому логично предположить, что и все правила английского языка распространяются на код, на котором он написан.

Цитата
А в тех местах где это не уместно предлагаются подчеркивания.
Я раньше применял такое правил, но отказался - глаз спотыкается об эти подчеркивания, а пользы я не нашел.
К тому же как только переменная меняет области видимости (локальная - глобальная - поле класса), ее ВЕЗДЕ приходится переименовывать.
Какой в этом смысл? Зачем в название переменной вносить область ее видимости?
Мне кажется более логичным создать ее экземпляр непосредственно перед тем местом, где она используется (в стеке).
В С++ такое возмоно, но не в С.
Например:
Код
for (int index = 0; ....)
{
...
}

Если в коде опять будет цикл, можно создать переменную с точно таким же именем, но это будет совсем ДРУГАЯ переменная,
что заставляет узко локализовать область использования временных (локальных) переменных, а не раскидывать их по всему коду функции,
особенно, если она вся не влазит на экран.
Хотя я стараюсь минимизировать число локальных переменных и главное - дробить огромные функции.







Цитата(Aaron @ Apr 4 2017, 12:30) *
очевидно же - у класса есть конструкторы/деструкторы и private/protected области видимости =)

В структуре все поля, если не указано public/private/protected, являются по-умолчанию public, а в классе - private.
Это - единственное отличие между структурой и классом. В остальном они отличаются лишь названием biggrin.gif

Цитата(jcxz @ Apr 4 2017, 12:23) *
Это как это? wacko.gif

Структура у меня используется лишь как структурированное хранилище данных (часто упакованы с соотв. атрибутами типа packed), т.е. ТОЛЬКО ПОЛЯ,
а класс - уже что-умеет делать сам, т.е. у его есть еще и МЕТОДЫ.
Я делю их между собой именно так, хотя прекрасно знаю, чем они отличаются на самом деле (см. выше).
Структур (struct) в коде у меня очень мало и почти все они имеют крайне локализованный характер, т. е. обладают очень узкой областью видимости. Насколько это возможно.
На самом деле, я немного слукавил, приведя в пример возможность структуры стать классом )) Обычно, это происходит не так явно - просто, резко сужается область видимости структуры и она попадает лишь внутрь соотв. класса.

Небольшое дополнение насчет макросов и замен "магических" чисел.
Поскольку в коде у меня нигде нет глобальных объектов, ни одного,
то это создает некоторые сложности с отказом от моего правила - макросов и замен "магических" чисел - БОЛЬШИМИ_БУКВАМИ_С_ПОДЧЕРКИВАЕНИЕМ.
Т. е. в моем случае такие "дефайны" имеют исключительно глобальный смысл и каждый объектный модуль при желании может их использовать.
Таким образом получается, что я как бы намекаю (сам себе, разумеется), что речь идет не об объектах, а лишь заменах (дефайнах), которые при компиляции (после препроцессора) станую обычными числами и выражениями.
Поэтому сильно сомневаюсь, что макросы и замены буду именовать иначе, чем так, как сейчас ))



jcxz
Цитата(Aaron @ Apr 4 2017, 11:30) *
очевидно же - у класса есть конструкторы/деструкторы и private/protected области видимости =)

К Вашему сведению: у структуры - тоже. laughing.gif
Единственное отличие между ними (насколько я знаю): у структуры права доступа по умолчанию - "public", у класса - "private".

PS: О! Уже опередили.... sad.gif
Kabdim
Цитата(Forger @ Apr 4 2017, 13:28) *
В С++ такое возмоно, но не в С.
Например:
Код
for (int index = 0; ....)
{
...
}

Вы про C99 не слышали?
Цитата(Forger @ Apr 4 2017, 13:28) *
можно создать переменную с точно таким же именем

Вы уверены что это можно назвать хорошим стилем? sm.gif
Цитата(Forger @ Apr 4 2017, 13:28) *
Структура у меня используется лишь как структурированное хранилище данных (часто упакованы с соотв. атрибутами типа packed), т.е. ТОЛЬКО ПОЛЯ,

Это называется plain old data (POD)
juvf
Цитата(Forger @ Apr 4 2017, 14:20) *
приходится при изменении типа этой переменной ВЕЗДЕ менять ее название - "мартышкин" труд, иначе не назовешь ))
я тоже не поддерживаю в имени переменной её тип (как например в том же гугл сайл), но переименовать переменную везде... так это вроде в пару кликов. рефакторинг ещё ни кто не отменял.
scifi
Цитата(juvf @ Apr 4 2017, 15:33) *
я тоже не поддерживаю в имени переменной её тип (как например в том же гугл сайл), но переименовать переменную везде... так это вроде в пару кликов. рефакторинг ещё ни кто не отменял.

+1. Современные текстовые редакторы - это благо. Тип переменной встраивали в её название в каменном веке, когда текстовые редакторы ещё недалеко ушли от карандаша и ручки. Сейчас объявление переменной вместе с её типом искать не приходится - оно само находится.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.