Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2014.10.12;
Скачать: [xml.tar.bz2];

Вниз

структура?   Найти похожие ветки 

 
ТНЕ картман   (2014-03-04 15:31) [0]

коль уж начали...
кто как предпочитает:
1)
function First(param: string): string;
...

function Second(param: string): string;
...

function Caller(param: string): string;
begin
  result = First(Second(param));
end;

2)
function First(param; string): string;
begin
 param = Second(param);
 ...
end;

function Second(param: string): string;
...

function Caller(param: string): string;
begin
  result = First(param);
end;


 
clickmaker ©   (2014-03-04 15:39) [1]

это же от контекста зависит. Насколько автономны first & second


 
Inovet ©   (2014-03-04 15:41) [2]

Вопрос странный - несвязанные и связанные. Как надо, так и надо.


 
ТНЕ картман   (2014-03-04 15:46) [3]

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

PS. java - на каждый чих по стопитсот созданных объектов и строк немеряно.


 
Ega23 ©   (2014-03-04 15:56) [4]


function First(param; string): string;
begin
Result = Second(param);
...
end;


Тогда и с const будет норм.


 
ТНЕ картман   (2014-03-04 16:21) [5]

ок, а так:

result := Func1(Func2(Func3(Func4(param))));

так кто-нть делает?


 
clickmaker ©   (2014-03-04 16:24) [6]

> так кто-нть делает?

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


 
Inovet ©   (2014-03-04 16:29) [7]

> [3] ТНЕ картман   (04.03.14 15:46)
> можно было бы одной функцией обойтись - первой нужен результат
> работы второй.

Тогда 2.


 
Константин ©   (2014-03-04 17:19) [8]


> ТНЕ картман   (04.03.14 16:21) [5]
> ок, а так:
>
> result := Func1(Func2(Func3(Func4(param))));
>
> так кто-нть делает?


если обернуть так:
function SamayMaynayaFunc(param)
begin
  result := Func1(Func2(Func3(Func4(param))));
end;

то почему нет?


 
й   (2014-03-04 17:49) [9]

так последовательность действий как-то очевиднее:

function TMyObject.MethodX(param): TMyObject;
...
result := MyObject.Method1(param1).Metod2(param2).Method3.Method4;


 
Inovet ©   (2014-03-04 18:07) [10]

> [9] й   (04.03.14 17:49)

Потом оказвается, что Metod2(param2) надо изменить на Metod21(param21).Metod22(param22)
Бегаем по всему коду поиском и меняем в 100500 местах. Нафига, если они всегда вызываются вместе?


 
й   (2014-03-04 18:10) [11]

если они ВСЕГДА вызываются вместе - нет смысла в двух методах, достаточно одного


 
Юрий Зотов ©   (2014-03-04 18:14) [12]

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

Если же Second допускается вызывать отдельно, то и делать ее надо отдельной.


 
ТНЕ картман   (2014-03-04 18:50) [13]


> Юрий Зотов ©   (04.03.14 18:14) [12]

function Root(param: string): string;
 function First(param: string): string;
    function Second(param: string): string;
    ....
 begin
    local_param := Second(param);
    ...
     
 end;

begin
 result := First(param);
end;


кошмар.


 
brother ©   (2014-03-04 18:59) [14]


> кошмар.

нормальная практика...


 
Inovet ©   (2014-03-04 19:12) [15]

> [11] й   (04.03.14 18:10)
> если они ВСЕГДА вызываются вместе - нет смысла в двух методах, достаточно одного

После затяжных праздников в думе приняли Закон о заголовках - Заголовки должны быть белыми. Программисты кинулись выискивать в программах заголовки и переделывать на

White(Str)

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

Upper(White(Str))

Ещё через день в думе, уже внимательнее рассмотрев заголовки, поняли что недодумали. Приняли поправку - Заголовки должны быть заглавными буквами.
Все кинулись выполнять указ

Upper(Str)

Но впереди предстояли очередные праздники...

Но были хитрые программисты. Они ещё из первого закона вычленили ключевые слова "заголовки" и "дума" и сделали сразу функцию.

Title(String)

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


 
Pavia ©   (2014-03-04 19:13) [16]

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

А подробнее Розыч опишет.


 
jack128_   (2014-03-04 20:16) [17]


> нормальная практика...

только IDE такое не переваривает. автокомплишн отваливается на раз.


 
Rouse_ ©   (2014-03-04 20:47) [18]


> Pavia ©   (04.03.14 19:13) [16]
> А подробнее Розыч опишет.

Эт врятли - Розыч все еще злой на Jack128, который для заполнения одной структуры (одна штука) умудрился реализовать 4 класса (с абстрактными).
А вы тут о вложенности какой-та...


 
Rouse_ ©   (2014-03-04 20:50) [19]

С тебя, кстати Жек коньяк - все че ты две недели кодил, я сегодня вырезал нафих и переписал с нуля за 4 часа.
С наступающим :)


 
картман ©   (2014-03-04 21:18) [20]


> Pavia ©   (04.03.14 19:13) [16]
>
> Правильный способ номер 1.
> Есть такое правило. Есть такая вещь, как вложенность она
> не должна привышать двух.  Если она привышает 2 то код становиться
> не наглядным и трудно читаемым.
>
> А подробнее Розыч опишет.

дык, ясное дело, в машкодах вложенные функции писать та еще заморочка))


> реализовать 4 класса



> за 4 часа.

8, надо было 8 классов сделать!))


 
Rouse_ ©   (2014-03-04 21:19) [21]


> картман ©   (04.03.14 21:18) [20]

Злые вы, уйду от вас :)


 
Плохиш ©   (2014-03-04 21:32) [22]

Ветка о том как ненадо программировать на любом языке.


 
Плохиш ©   (2014-03-04 21:33) [23]


> PS. java - на каждый чих по стопитсот созданных объектов
> и строк немеряно.

Разруха, она в головах.


 
jack128_   (2014-03-04 21:34) [24]


> который для заполнения одной структуры (одна штука) умудрился
> реализовать 4 класса

Толи дело розыч, который для заполнения 3 структур просто три раза скопировал программу.


 
Rouse_ ©   (2014-03-04 21:55) [25]


> jack128_   (04.03.14 21:34) [24]
> Толи дело розыч, который для заполнения 3 структур просто
> три раза скопировал программу.

Розыч не пишет для сложения двух чисел полноценный фреймфорк калькулятора с обвесом :)
Оть никак ты не поймешь когда нужно быстро, а когда правильно :)


 
Ega23 ©   (2014-03-04 22:07) [26]

а чё калькулятор-то сразу, не, ну чё, а?


 
Rouse_ ©   (2014-03-04 22:13) [27]


> Ega23 ©   (04.03.14 22:07) [26]
> а чё калькулятор-то сразу, не, ну чё, а?

ГЫ: ::)
http://www.youtube.com/watch?v=oeJ7_tVJWOI


 
Pavia ©   (2014-03-04 22:20) [28]


> дык, ясное дело, в машкодах вложенные функции писать та
> еще заморочка))

На ассемблере создавать вложенные функции проблем нет.

Сразу скажу что сейчас изучаю язык описания аппаратуры(Это то что ниже маш.кодов), а там счёт идёт от нуля. Поэтому сбился со счёта не 1, а 2.

Я имел в виду не вложенность функций. А вложенность структуры(ну не помню как оно называется, а искать лень). Конкретно тут по скобочкам можно посчитать.  

result := Func1(Func2(Func3(Func4(param))));
result := MyObject.Method1(param1).Metod2(param2).Method3.Method4;
Чаще всего названия длинные, а если ещё и вычисления, то легко запутаться.
Поэтому так не делают, а дробят функции по уму. Из редко допустимо применение With.

И вложенными делать не надо будет. Правда продумать структуры типы и классы придётся.  

Обычно такие проблемы возникают из-за неправильной семантики. И решаются довольно просто перегруппировкой команд и правильным именованием функций. Если не достаточно, то заводиться новый тип данных или класс.

По поводу 4 абстрактных классов. Это перебор. Хотя тут вопрос в том к какой част программы эти структуры относятся.  Одно дело это оптимизация рутины, другое дело бизнеслогика, третье основная модель.

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


 
Inovet ©   (2014-03-04 22:25) [29]

> [28] Pavia ©   (04.03.14 22:20)
> Сразу скажу что сейчас изучаю язык описания аппаратуры(Это
> то что ниже маш.кодов),

Это что за хрень такая?


 
Rouse_ ©   (2014-03-04 22:28) [30]


> По поводу 4 абстрактных классов. Это перебор. Хотя тут вопрос
> в том к какой част программы эти структуры относятся.  Одно
> дело это оптимизация рутины, другое дело бизнеслогика, третье
> основная модель.

Это карта памяти микроконтроллера, фиксированная (4096 байт). Шаг в лево/вправо - расстрел. Нужно было ее всего лишь инициализировать подобающим образом :)


 
Rouse_ ©   (2014-03-04 22:30) [31]


> Inovet ©   (04.03.14 22:25) [29]
> Это что за хрень такая?

Даташиты судя по всему...


 
имя   (2014-03-04 22:41) [32]

Удалено модератором


 
Pavia ©   (2014-03-04 22:44) [33]


> > [28] Pavia ©   (04.03.14 22:20)> Сразу скажу что сейчас
> изучаю язык описания аппаратуры(Это > то что ниже маш.кодов),
>  Это что за хрень такая?

Это HDL, их существует несколько:
VHDL и Verilog HDL.
Мало того что названия совпадают, так внутри полная хрень.


 
й   (2014-03-04 23:02) [34]

Pavia, а если так:
result := MyObject
 .Method1(param1)
 .Metod2(param2)
 .Method3.Method4;

как бы не вижу вложенности, вижу последовательность
(функции/методы обычно из многих последовательных строк/операторов состоят - это ничего, не напрягает? даже в самых строгих предписаниях позволяют экраном ограничиваться (~ 25 строк) - может, тоже до двух сократить?)


 
й   (2014-03-04 23:03) [35]

(забыл .Method4 тоже перенести на новую строку)


 
Inovet ©   (2014-03-04 23:13) [36]

> [33] Pavia ©   (04.03.14 22:44)
> Это HDL

Вон чё. Это типа компиляторы сразу в вентили мимо машкодов.


 
Inovet ©   (2014-03-04 23:30) [37]

> [36] Inovet ©   (04.03.14 23:13)

Кстати. Помнится, Интел свой Пентиум моделировали аппартно на мелочёвке, макет получился с такую внушительную тумбу. Дальше стало нереально аппратное моделирование, вот и стали активно внедрять такие программные методы. Так это было уже 20+ лет назад.


 
имя   (2014-03-04 23:50) [38]

Удалено модератором


 
картман ©   (2014-03-04 23:57) [39]

Удалено модератором


 
Компромисс1 ©   (2014-03-05 00:03) [40]

Есть pattern fluent builder, типа
MyObject myObject = new MyObject.Builder().param1(2).param5(29).param3("St").build();

А есть anti-pattern "лезть не в свое дело", типа
MyObject myObject = MyFactory.getInstance().createObjects().get("AllObjects").getObjectByClass(MyObj ect.class);

И их надо четко различать.
Грубо говоря, нельзя вызывать методы у результата метода
obj.getMyField().getSomeMethod() должен быть заменен на obj.getMyMethod()



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2014.10.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.003 c
15-1393673749
Ю.В.
2014-03-01 15:35
2014.10.12
Выбор принтера


15-1393932699
ТНЕ картман
2014-03-04 15:31
2014.10.12
структура?


2-1382887071
Vatolin
2013-10-27 19:17
2014.10.12
Установка компоненты


15-1393226586
Jimmy
2014-02-24 11:23
2014.10.12
Реклама в своих програмах


15-1393619403
Юрий
2014-03-01 00:30
2014.10.12
С днем рождения ! 1 марта 2014 суббота





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский