Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе / 25 сообщений из 26, страница 1 из 2
27.03.2013, 11:32
    #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
27.03.2013, 11:55
    #38200185
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
...
Рейтинг: 0 / 0
27.03.2013, 11:58
    #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
27.03.2013, 12:22
    #38200257
Изюбр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
ок. спасибо.

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

С производительностью проблем там нет ? Нормально, можно спокойно использовать кучу лямбд в функции ? Чисто для улучшения читабельности...
...
Рейтинг: 0 / 0
27.03.2013, 12:45
    #38200297
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
Изюбр...Как это решается в шарпе ?ни как и не зачем. Ну есть в классе некая функция, которая исп. только в одной процедуре(методе) и что? А вот в классе внутренние классы это сколько угодно.
...
Рейтинг: 0 / 0
27.03.2013, 13:36
    #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
27.03.2013, 13:41
    #38200418
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
ИзюбрЕдинственный вопрос. В лямбдах можно создавать свои временные переменные ?
Код: c#
1.
2.
3.
4.
5.
Func<int, int> bar = n1 =>
{
  var n2 = 100;
  return n1*n2;
};


fortibransaНу есть в классе некая функция, которая исп. только в одной процедуре(методе) и что?
То, что эта функция может быть достаточно объемной, и использоваться, например, в тех же linq statements. Не особенно получится разбираться в коде, когда внутри длинного linq функция на пяток-десяток строк, да еще в нескольких местах. И выглядит чисто внешне это тоже не очень.
...
Рейтинг: 0 / 0
27.03.2013, 15:22
    #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
27.03.2013, 16:25
    #38200789
Изюбр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
pation,

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

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

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

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

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

Хотя кому как. Я говорю лишь за себя, и создавал тему с вопросом только для себя :)Сказали-же нету, а в студии все удобно и лихо читается и подписывается и переходится и отлаживается и тд и тп. Только знать нужно сие средство разработки и иметь опыт, потом это все влет читается.
...
Рейтинг: 0 / 0
27.03.2013, 19:17
    #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
27.03.2013, 21:02
    #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
28.03.2013, 07:08
    #38201560
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
ИзюбрДа и не хочется захламлять интерфейс.Где тут интерфейс?
...
Рейтинг: 0 / 0
29.03.2013, 11:35
    #38203843
Изюбр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
ну интерфейсом не только сам interface зовется. Но и открытые члены касса.

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

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

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

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

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


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

:)
...
Рейтинг: 0 / 0
29.03.2013, 11:45
    #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
29.03.2013, 12:07
    #38203918
Изюбр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какие аналоги подфункций (из Дельфи) есть в Шарпе
Алексей К,

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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