Концепция имен указателей

Тема в разделе "LANGS.C", создана пользователем Ronin_, 29 июн 2017.

  1. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.329
    Но ведь это и есть ошибка. Это как если бы ты писал:
    Код (C):
    1. answer = (const int)42;
    Оккам негодуе :)
     
  2. Ronin_

    Ronin_ Active Member

    Публикаций:
    1
    Регистрация:
    24 дек 2016
    Сообщения:
    252
    rmn, вы опять повторяетесь, вы читали мой ответ?
     
  3. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.329
    Тот, где ты в качестве оправдания говоришь, что сначала пишешь код переполненный избыточными токенами, а потом кропотливо их убираешь в release? Не, не читал :)
     
  4. Ronin_

    Ronin_ Active Member

    Публикаций:
    1
    Регистрация:
    24 дек 2016
    Сообщения:
    252
    Это не оправдания, так как я вам ничего не должен чтобы оправдываться, а утверждение того как мне удобно писать код, так как он не законченный вариант и может измениться вместо аргумента принимаемого как call by value к call by reference.

    Теперь яснее?
     
  5. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.329
    Ну это вообще ни в какие ворота... :) Такое решение должно приниматься до написания кода.
     
  6. Ronin_

    Ronin_ Active Member

    Публикаций:
    1
    Регистрация:
    24 дек 2016
    Сообщения:
    252
    Неужели?

    Когда находится решение лучше предыдущего, вы оставите как есть?

    С таким иррациональным рассуждением многое бы попросту не переписывалось и не улучшалось, не так ли?
     
  7. ol.

    ol. Active Member

    Публикаций:
    0
    Регистрация:
    21 фев 2017
    Сообщения:
    118
    Во-первых, не три версии функции, а три разные функции.
    Во-вторых, для разделения сущностей.
    В-третьих, для четкого обозначения что каждая проверка делает.
    И в-четвертых, для избежания возможной копипасты, естественно.
    Бу-го-га. Лично ты используешь код этого "новичка" чуть ли не круглосуточно. Причем разный, причем много лет.
    Угу, и лепи все в одну кучу так, чтобы никто (включая себя любимого через три месяца) не мог понять, что написано. И успешно каждый раз чтобы создавал новую версию той же функции, но уже понятную.

    После компиляции мой и ваш код будут одинокавыми. Но мой сможет понять и поддерживать любой джун даже через много лет.
    Точно то же самое, что и у вас, естественно.
    А по коду это не видно. Не потому ли, что таки говнокод? ))
    Кисо обиделось? Любимую функцию назвали говнокодом?

    В каком именно стиле не писать? Не приводить пример отрефакторенного кода для обсуждения? Заметьте, я ни разу не написал "так пишут новички"....

    Может на "говнокод" обиделись? Так мы все регулярно говнокод пишем, потому что век живи - век учись. Я вот на свой код 10-летней давности без слез смотреть не могу, причем это обычно слезы смеха )
    Я давно специализируюсь на асме и низкоуровневом С. Но приходится по роду деяйтельности регулярно писать на с++, джаве и лиспе.
     
    Последнее редактирование модератором: 7 июл 2017
  8. Ronin_

    Ronin_ Active Member

    Публикаций:
    1
    Регистрация:
    24 дек 2016
    Сообщения:
    252
    ol., Начнем.

    Для этого есть cctype и функции такие как isupper, islower, etc, но самое главное что у меня есть собственные функции, которые обрабатывают содержимое собственного класса String, поэтому вы не зная мой код проявляете инициативу не нужную, основываясь на куске кода.

    Не то же самое, у меня там кирилица чекается, а у вас из названия уже понятно, то что не символ. То что не символ в другом диапазоне чекается, посмотрите что ль таблицу кодировок.

    На остальное не считаю нужным отвечать....
    Пишите по делу.
     
    Последнее редактирование модератором: 7 июл 2017
  9. ol.

    ol. Active Member

    Публикаций:
    0
    Регистрация:
    21 фев 2017
    Сообщения:
    118
    Ууууу, так у вас еще все и на контекст завязано? Отлично, и после этого вы свой код называете хорошим?

    Любая, я подчеркиваю, любая функция в коде должна быть понятна без того, чтобы рассматривать и разгребать контекст. У меня под руками вот прямо сейчас лежит 30 тысяч файлов на 300 метров сорцов. Я что, должен перелопатить их все, чтобы понимать что нужная мне функция делает?

    Как написали, так я и понял. Я не против поменять название функции на что-то более правильное. После замены названия на non_cyrillic() или что-то похожее данная претензия к приведенному примеру пропадет?

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


    Короче, все с Вами, понятно. Кодить не умеете, но вместо того, чтобы слушать умных людей и учиться, начинаете нести какую-то охинею. Думаю, на этом можно заканчивать.
     
    Последнее редактирование модератором: 7 июл 2017
  10. Ronin_

    Ronin_ Active Member

    Публикаций:
    1
    Регистрация:
    24 дек 2016
    Сообщения:
    252
    [delete]
    Незнание вас не принуждало писать в данной теме и то чего вы не знаете в моих глазах вас не унижает.
    Конечно хорошим, так как вы опять пишите не зная, функционал вынесен в отдельный файл который использует класс, чтобы не было каши.
     
    Последнее редактирование модератором: 7 июл 2017
  11. Ronin_

    Ronin_ Active Member

    Публикаций:
    1
    Регистрация:
    24 дек 2016
    Сообщения:
    252
    ol., это священная аски кодировка, ничего сложно и не читаемого в ней нет.

    Возможно это наглость, но поймите меня правильно, покажите мне свой код на плюсах или сишечке? Желательно ваш, а не коллег.
     
  12. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.548
    Адрес:
    Russia
    Я поддерживаю ol., таки да, говнокод. Вот понадобится вам раздельный функционал, будете плодить сущности сами.
    И более того - МАГИК НАБМЕР БЛЭТ
     
    ol. нравится это.
  13. Ronin_

    Ronin_ Active Member

    Публикаций:
    1
    Регистрация:
    24 дек 2016
    Сообщения:
    252
    Ещё раз, этот диапазон нужен дабы использовать его в собственных функциях таких как isupper, islower, swapcase, так и зачем мне их ещё раз дублировать?
     
  14. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.548
    Адрес:
    Russia
    Вы не думаете об архитектуре, вы думаете в стиле "Я сэкономлю немного места , помещу все в 1 функцию". Но вы не думаете, что могут потребоваться другие функции. И что совсем не наглядно использовать для одной цели, функцию, которая делает совсем другое. Это противоречит правилу "не создавать функций двойного назначения"
     
  15. Ronin_

    Ronin_ Active Member

    Публикаций:
    1
    Регистрация:
    24 дек 2016
    Сообщения:
    252
    TermoSINteZ, частично с вами согласен, но частично нет.

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

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

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Код говно.
    1. const не нужен.
    2. Символы надо сравнивать с символами.
    3. Я бы закастил принудительно к unsigned и работал с этим, т.к.:
    а. никогда не видел, чтобы у символов были отрицательные коды;
    б. количество проверок уменьшится как минимум на одну, а каст signed -> unsigned вообще ничего не стоит.
    3. return true, return false для булевского выражения... Так студенты колледжа на третьем курсе у меня пишут, и я их больно бью за это гусями.
     
    ol. и TermoSINteZ нравится это.
  17. Ronin_

    Ronin_ Active Member

    Публикаций:
    1
    Регистрация:
    24 дек 2016
    Сообщения:
    252
    SadKo, перечитайте ветку, вы повторяетесь, тут уже на две страницы трештока.

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

    Символы можно сравнивать и с кодами.

    ASCII:
    [​IMG]
     

    Вложения:

    • ASCII Chart.png
      ASCII Chart.png
      Размер файла:
      74 КБ
      Просмотров:
      809
    Последнее редактирование: 7 июл 2017
  18. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Да кто сейчас с однобайтовой кириллицей работает?
    Сейчас либо utf8, который надо передавать как const char*, либо utf16, который wchar_t.
     
  19. Ronin_

    Ronin_ Active Member

    Публикаций:
    1
    Регистрация:
    24 дек 2016
    Сообщения:
    252
    Переписал, вынес в отдельные функции, у кирилицы заюзал тип wchar_t. does not work...
     
  20. Ronin_

    Ronin_ Active Member

    Публикаций:
    1
    Регистрация:
    24 дек 2016
    Сообщения:
    252
    Подведем итоги. Сел вчера и на свой ляд переписал с уклоном варианта ol.,

    Код (C++):
    1.     inline bool russ_uppercase(const char &ch)
    2.     {
    3.         return (ch >= 'А' && ch <= 'Я');
    4.     }
    5.  
    6.     inline bool russ_lowercase(const char &ch)
    7.     {
    8.         return (ch >= 'а' && ch <= 'я');
    9.     }
    10.  
    11.     inline bool uppercase(const char &ch)
    12.     {
    13.         return (ch >= 'A' && ch <= 'Z');
    14.     }
    15.  
    16.     inline bool lowercase(const char &ch)
    17.     {
    18.         return (ch >= 'a' && ch <= 'z');
    19.     }
    20.  
    21.     inline bool is_valid_character(const char &ch)
    22.     {
    23.         return russ_uppercase(ch) || russ_lowercase(ch) || uppercase(ch) || lowercase(ch);
    24.     }
    А вот одна из функций что обращается к некоторым из них:

    Код (C++):
    1.     char *upper(char *dst, const char *src)
    2.     {
    3.         char *pd = dst;
    4.         const char *ps = src;
    5.        
    6.         while(*ps)
    7.         {
    8.             if(russ_lowercase(*ps) || lowercase(*ps))
    9.                 *pd++ = (*ps++ & 223);
    10.             else
    11.                 *pd++ = *ps++;
    12.         }
    13.        
    14.         return dst;
    15.     }
    Здесь при каждой итерации приходится обращаться к 2-ум функциям, но функция swapcase обращается к is_valid_character, которая в свою очередь обращается к 4-ем функциям, что в итоге приводит при каждой итерации вызов 5-ти функций.

    Убрал указатели по совету SadKo, вместо них заюзал ссылки, так как это рациональнее на мой взгляд.

    Естественно, так как они у нас не рекурсивны, etc, то сделал их inline, дабы можно было сделать инлайн подстановку.

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

    Что потерялось? Хардкор который умещался в 3-строках и заключался в единственном вызове функции.

    Какие плюсы? Читабельность и больше гибкости при необходимости проверять вместо 4-х диапазонов, всего лишь два.
     
    Последнее редактирование: 8 июл 2017
    ol. нравится это.