powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
25 сообщений из 26, страница 1 из 2
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38200151
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот пример подфункции в дельфи:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
procedure Proc();
var
  List: PIconRecArray;
  
  // подфункция
  function AdjustColor(I: Integer): Integer;
  var
     TempI: integer; // свои собственные переменные

     // Еще более вложеная функция (для особых извращенцев !)
     procedure AnotherInnerProc; 
     begin
     ...
     end;

  begin
    List ... 

    if I = 0 then
      Result := MaxInt
    else
      Result := I;
  end;
begin
 // Вызов подфункции
 AdjustColor(0);
end;



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

Как это решается в шарпе ?
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38200185
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38200194
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
Action<int, string> foo = (n, s) => Console.WriteLine("{0}: {1}", s, n);
Func<int, int> bar = n1 => n1*2;
foo(100, "test");
Console.WriteLine(bar(4));
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38200257
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ок. спасибо.

Единственный вопрос. В лямбдах можно создавать свои временные переменные ?
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38200272
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще позвольте вопрос.

С производительностью проблем там нет ? Нормально, можно спокойно использовать кучу лямбд в функции ? Чисто для улучшения читабельности...
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38200297
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюбр...Как это решается в шарпе ?ни как и не зачем. Ну есть в классе некая функция, которая исп. только в одной процедуре(методе) и что? А вот в классе внутренние классы это сколько угодно.
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38200409
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fortibransaИзюбр...Как это решается в шарпе ?ни как и не зачем. Ну есть в классе некая функция, которая исп. только в одной процедуре(методе) и что? А вот в классе внутренние классы это сколько угодно.

Не могу с Вами согласится извините.
Очень много примеров кода, особенно с различными кейсами и ifами, когда бывает удобно упаковать часть кода (буквально в 3-5 строк) в подфункцию.

Гораааааздо приятней читать код:

Код: pascal
1.
2.
3.
4.
5.
6.
case I of
  1..5: DoSome;
  6..9: DoAnother;
else
  DoDefault;
end;



Сами понимаете - выносить эти функции в КЛАСС это совсем захламлять интерфейс (тогда в классе вместо 5 методов ВНЕЗАПНО станет 20... При том, 15 из них используются только в одной из функций... Поди потом разберись в этом классе, если нужно что-то добавить/переделать.

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

Я можно сказать фанат минифункций....
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38200418
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзюбрЕдинственный вопрос. В лямбдах можно создавать свои временные переменные ?
Код: c#
1.
2.
3.
4.
5.
Func<int, int> bar = n1 =>
{
  var n2 = 100;
  return n1*n2;
};


fortibransaНу есть в классе некая функция, которая исп. только в одной процедуре(методе) и что?
То, что эта функция может быть достаточно объемной, и использоваться, например, в тех же linq statements. Не особенно получится разбираться в коде, когда внутри длинного linq функция на пяток-десяток строк, да еще в нескольких местах. И выглядит чисто внешне это тоже не очень.
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38200653
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюбрfortibransaпропущено...
ни как и не зачем. Ну есть в классе некая функция, которая исп. только в одной процедуре(методе) и что? А вот в классе внутренние классы это сколько угодно.

Не могу с Вами согласится извините.
Очень много примеров кода, особенно с различными кейсами и ifами, когда бывает удобно упаковать часть кода (буквально в 3-5 строк) в подфункцию.

Гораааааздо приятней читать код:

Код: pascal
1.
2.
3.
4.
5.
6.
case I of
  1..5: DoSome;
  6..9: DoAnother;
else
  DoDefault;
end;




Сами понимаете - выносить эти функции в КЛАСС это совсем захламлять интерфейс (тогда в классе вместо 5 методов ВНЕЗАПНО станет 20... При том, 15 из них используются только в одной из функций... Поди потом разберись в этом классе, если нужно что-то добавить/переделать.

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

Я можно сказать фанат минифункций....

в данном конкретном случае лямбда не повысит читабельности кода, а для "лишнего" десятка методов, "захламляющих" класс, есть такие вкустности как модификаторы доступа, регионы, ну и наконец partial
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38200789
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pation,

Как модификаторы доступа помогут тому кто сопровождает-поддерживает код конкретного класса ? он все равно видит 20 методов.

Не уверен что и Partial в данном случае нужен. Хочется почитать один модуль с классом, а не листать кучу файлов. И чтобы все нужное было рядом в нужном месте. Под функции как раз удовлетворяют моему требованию :)

Хотя кому как. Я говорю лишь за себя, и создавал тему с вопросом только для себя :)
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38200823
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюбрpation,

Как модификаторы доступа помогут тому кто сопровождает-поддерживает код конкретного класса ? он все равно видит 20 методов.

Не уверен что и Partial в данном случае нужен. Хочется почитать один модуль с классом, а не листать кучу файлов. И чтобы все нужное было рядом в нужном месте. Под функции как раз удовлетворяют моему требованию :)

Хотя кому как. Я говорю лишь за себя, и создавал тему с вопросом только для себя :)Сказали-же нету, а в студии все удобно и лихо читается и подписывается и переходится и отлаживается и тд и тп. Только знать нужно сие средство разработки и иметь опыт, потом это все влет читается.
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38201182
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюбрpation,

Как модификаторы доступа помогут тому кто сопровождает-поддерживает код конкретного класса ? он все равно видит 20 методов.

Не уверен что и Partial в данном случае нужен. Хочется почитать один модуль с классом, а не листать кучу файлов. И чтобы все нужное было рядом в нужном месте. Под функции как раз удовлетворяют моему требованию :)

Хотя кому как. Я говорю лишь за себя, и создавал тему с вопросом только для себя :)

смотри сам как удобнее
так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
public void MyMethod(int i)
        {
            switch(i)
            {
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                    DoSome();
                    break;
                case 6:
                case 7:
                case 8:
                case 9:
                    DoAnother();
                    break;
                default:
                    DoDefault();
                    break;
            }
        }

#region Hide

        private void DoDefault()
        {
            throw new NotImplementedException();
        }

        private void DoAnother()
        {
            throw new NotImplementedException();
        }

        private void DoSome()
        {
            throw new NotImplementedException();
        }
#endregion


или так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
public void MyMethod(int i)
        {
            Action doSome = () =>
            {
                throw new NotImplementedException();
            };
            Action doAnother = () =>
            {
                throw new NotImplementedException();
            };
            Action doDefault = () =>
            {
                throw new NotImplementedException();
            };

            switch(i)
            {
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                    doSome();
                    break;
                case 6:
                case 7:
                case 8:
                case 9:
                    doAnother();
                    break;
                default:
                    doDefault();
                    break;
            }
        }
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38201317
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Код: c#
1.
2.
3.
4.
5.
6.
delegate void F (int i);
...            
List<F> f = new List<F>(new F[] { 
n => Console.WriteLine(n),
n => Console.WriteLine(-n)});
f[1].Invoke(1);
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38201560
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзюбрДа и не хочется захламлять интерфейс.Где тут интерфейс?
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38203843
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну интерфейсом не только сам interface зовется. Но и открытые члены касса.

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

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

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

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

Только и всего.


А вообще, Мартин Фаулер все давно расписал
http://sourcemaking.com/refactoring/extract-method
http://sourcemaking.com/refactoring/decompose-conditional
http://sourcemaking.com/refactoring
и т.д.

:)
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38203861
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюбрну интерфейсом не только сам interface зовется. Но и открытые члены касса.

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

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

Просто одно дело когда подфункции складируются в нужной функции, и там используются (а в шарпе получается их еще и передавать между друг другом функции могут, так что опять таки нет нужды выносить их в "интерфейс класса", а просто передать при вызове).Если разделение метода на методы неудобно - зачем это делать? Чтобы не было конфликтов с именами локальных переменных в большом методе - можно разбить его на блоки
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void MyBigMethod()
{
    int j = 0; // общая для всего метода

    {
        int i = 0; // локальная для блока

    }
    {
        int i = 0; // локальная для блока

    }
}

Получается примерно тоже самое, что и с вложенными процедурами в Паскале.

ИзюбрА другое дело, когда в классе 20 функций, и нужно пройтись и выяснить, что 15 из них используются только в одном единственном месте и ни в коем случае не могут быть полезны где-то еще.Может есть смысл разделить класс на классы?

ИзюбрИ это хорошо, если будут коменты к методам, и не придется залазить в них.Коментарии должны быть только в крайнем случае. Всё должно быть понятно из имён методов, имён их параметров и контекста вызова.
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38203918
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К,

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


И разбить на классы не выйдет. Это как из пушки по воробьям.

Вот простой пример:
нужно пройтись в цикле по некоемому списку, отобрать часть элементов удовлетворяющую условиям, и сделать определенные манипуляции с подходящим элементом.

НЕ углубляясь в LINQ (в коем я не спец), данную задачу можно разбить на 2 подфункции:

1. Прохождение в цикле. Проверка условия (первая подфункция).
2. Если условие проходит вызов подфункции (вторая подфункция) для элемента списка.

Ради этого создавать целый класс ?

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

Вот в этом примере подфункции типичный пример их пользы.
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38203945
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзюбрСмысл же не только в том, чтобы "визуально" разделить метод на блоки.
Вынесение в подфункции полезно тем, что функцию можно вызвать несколько раз в методе- в цикле например.Ну может быть.

ИзюбрИ разбить на классы не выйдет. Это как из пушки по воробьям.Это не Паскаль. Тут для описания класса не надо писать много букв (interface, implementation, прототипы методов и прочая лабуда). Классы могут быть вложенными и приватными. Всё для людей...

ИзюбрВот простой пример:
нужно пройтись в цикле по некоемому списку, отобрать часть элементов удовлетворяющую условиям, и сделать определенные манипуляции с подходящим элементом.

НЕ углубляясь в LINQ (в коем я не спец), данную задачу можно разбить на 2 подфункции:

1. Прохождение в цикле. Проверка условия (первая подфункция).
2. Если условие проходит вызов подфункции (вторая подфункция) для элемента списка.Ну делай два метода. В чём проблема?

ИзюбрРади этого создавать целый класс ?Если в классе оказалось настолько много методов, что с ним стало неудобно работать - да. Фаулер это тоже рекомендует, см "выделение класса".

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

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

Вот в этом примере подфункции типичный пример их пользы.см "выделение класса".
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38203978
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзюбрНе могу с Вами согласится извините.
Очень много примеров кода, особенно с различными кейсами и ifами, когда бывает удобно упаковать часть кода (буквально в 3-5 строк) в подфункцию.
Это типичный подход дельфиста, который присматривается к .NET и хочет старое барахло на новые рельсы, сколько таких как ты было, непересчесть. Сам из таких.
По делу: забудь про подфункции - это зло. Используй классический ООП подход, которые легко чистается, легко тестируется, легко документируется, легко интеллисенсится - реализация члена в самом классе. Только так и никак иначе.
P.S. Речь не о возможности прикрутить делегат или лямбда-метод, речь именно о понимании и нужности подфункций в языке. Авторитетно заявляю, что это 100% не нужно.
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38204014
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ,

ну не спорю. тестируемость лучше.
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38204102
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзюбрМСУ, ну не спорю. тестируемость лучше.
Доверься нашим советам, не принимай их сразу в сознание, а просто поверь пока нам на слово. Понимание будет немного позже, когда углубишься во всю красоту, богатство и нереальную мощь языка. Когда вернешься к своему вопросу (через несколько месяцев, может и лет) и заново прочитаешь всё, что писал, ты просто посмеешься над собой :)
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38204132
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУИзюбрМСУ, ну не спорю. тестируемость лучше.
Доверься нашим советам, не принимай их сразу в сознание, а просто поверь пока нам на слово. Понимание будет немного позже, когда углубишься во всю красоту, богатство и нереальную мощь языка. Когда вернешься к своему вопросу (через несколько месяцев, может и лет) и заново прочитаешь всё, что писал, ты просто посмеешься над собой :)Прослезился... Но сказано правильно, что-то в этом есть. :-)

зы: Это ещё цветочки. Настоящая ломка начнётся, когда дело дойдёт до работы с БД. Отказ от TDataSet и прочих "квадратиков на форме" будет происходить очень болезненно. :-)
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38204158
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНастоящая ломка начнётся, когда дело дойдёт до работы с БД. Отказ от TDataSet и прочих "квадратиков на форме" будет происходить очень болезненно. :-)
Точно подмечено. Датасеты в пух и прах сносят инакомыслие дельфийца, пожирая большими порциями его моск. Но когда на форум вломится какой-нибудь Алексей К и прокричит во всеуслышанье "датасеты зло, выбрось их на помойку - кури ORM, желательно CodeFirst", дельфиец упадёт пацтол и нервно задёргается в конвульсиях
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38204269
Фотография The Dwarf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты решил сменить веру, начинай изучать священное писание прямо сейчас: http://it-ebooks.info/book/903/

1500 страниц удовольствия
...
Рейтинг: 0 / 0
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
    #38204478
Изюбр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The DwarfЕсли ты решил сменить веру, начинай изучать священное писание прямо сейчас: http://it-ebooks.info/book/903/

1500 страниц удовольствия

Проблема не в смене религии, а в смене работы, и потере в Зп.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]