Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: как не перепутать = и ==  (Прочитано 39688 раз)
0 Пользователей и 1 Гость смотрят эту тему.
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #30 : 24-08-2005 09:10 » new

сорри, ну не люблю я конструкции использующие операторы не по назначению Улыбаюсь. Это я про while. Хотя решение достаточно интересное - сам никогда не пользовался  Отлично. Как это говориться  - изврат понравился Улыбаюсь. А также не люблю многовложенных ифов, вот конкретно, что делает программу плохопонимаемой, особенно вложенный в иф-блок кусок кода строк на 200-300 Улыбаюсь. и занимает практически все тело функции. Уж проще сразу обратное условие и с вещами на выход  Ага

Поддерживаю!  А break внутри while -- это подобие try - throw - catch конструкции.

Для Си++ есть удобный механизм "ресурс как локальная переменная" -- сделать класс-обёртку вокруг функций захвата-освобождения, в конструкторе производится аллокация, в деструкторе освобождение.  Деструктор будет вызван только для созданных объектов и не потребуется анализ причин выхода для того, чтобы решить, что нужно освобождать.

Правда, этот фокус проходит только с Си++ и требует знания фокуса от читающего, иначе может элементарно сбить с толку.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #31 : 24-08-2005 10:26 » 

Таким образом твой метод разбиения превратит сегодняшний файл с 20 функциями и длиной в 3-4 тышшы строк в файл с 100 функций и кучей ненужных передач параметров через стек

Не понимаю, как может мой метод раздуть код с 20 функциями до 3-4 тыщщ строк Здесь была моя ладья...
Проблемы со стеком тоже решаемы.

Я уж не говорю, что ты пиешь о "нечитаемом" коде, когда создаешь сам ненужные функции....

Как может человек писать о нечитаемом коде когда предлагает объеденять сложные многоступенчатые вызовы в совершенно неудобочитаемый if Жаль
...
Так что давай не будем вешать ярлыки.

Без проблем, ярлыки больше вешать не будем.
Говоря об читабельном коде я имею в виду понятия, которые подробно объясняются в книгах Аллена Голуба, Скотта Мейерса и Мартина Фаулера. Если ты читал их и не согласен - спорить больше не о чем. У каждого из нас свое видение этого вопроса.

Кроме того - ты в другой теме обиделся на Мля... Жаль.

Ты уже видел, что я не из обидчивых Улыбаюсь

Иногда, в споре рождается истина.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #32 : 24-08-2005 11:14 » 

1. Нигде я не писла, что твой метод раздует код до 2-4 тыш строк. Читай внимательно. Твой метод раздует уже имеющийся файл с 3-4 тышами и 20 функциями с моим методом, в файл с 100 функциями, который невозможно назвать удобочитаемым ибо будет куча инитов и осовбождений.

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

Исходя из 15 летнего опыта программинга - имеется след. положения.

1. Функция должна быть функционально обособлена и закончена. Иначе создание функции нерентабельно.
2. Функция должна иметь зону инициализации, зону работы и зону выхода (деинициализации).
3. В функции не должно быть переходов за пределы функции минующие выход из нее нормальным способом, например с помощью ГОуТУ.
4. Функция не должна иметь вложенных вызовов и вложенных ифов на глубину более трех позиций, иначе код исчезает.
5. В функции не должно быть операторов условия с более чем 2-мя разными условиями опбъединенными операторами "и" и/или "или". В этом случае она будет неудобочитаема, так как невозможно будет быстро просчитать и увидеть куда заведет условие в различных случаях и данных.

Функция должна иметь не более 2-х точек выхода. Препочтительно 1одна, но в случае быстрой проверки входных параметров до инициализации - то тогда полагается две.
В противном случае есть неудобные моменты в отслеживании места с которого она вышла в случае одинакого кода ошибки или возврата типа войд....

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

3. Рад что не обижаемся.
Но в споре истина умирает - она рождатся и живет в обсуждении которое не предполагает пропусков смысла подобного сделанному тобой в первом пункте...

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

А птичку нашу прошу не обижать!!!
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #33 : 24-08-2005 11:40 » 

1. Нигде я не писла, что твой метод раздует код до 2-4 тыш строк. Читай внимательно.
Да, сорри - здесь я не углядел.

Насчет остального я уже писал.
Спасибо, что поделился опытом (серьезно).
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #34 : 24-08-2005 11:48 » 

Улыбаюсь
Записан

А птичку нашу прошу не обижать!!!
Pu
Большой босс

ru
Offline Offline
78


« Ответ #35 : 25-08-2005 05:29 » 

Гром, что то меня затупило, вместо твоего while(1) есть гораздо более качественный метод решения задачи в С. Операции if else - ВОТ ЧТО здесь надо. Как мне это в голову сразу не тумкнуло   Вот такой я вот, это при том что в моем коде они напиханы везде  Улыбаюсь. Те же switch найти очень сложно.

Код:
  int result = 0;
  int * i = malloc(100);

  if ( !AllocateBuffer())
      result = 1;
  else if ( !AllocateModule())
      result = 2;
  else if ( !AllocateLibraryStruct())
      result = 3;
  else if ( !AllocateInitData())
      result = 4;

if ( result)
{
  // освобождение
}
return result;
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines