Модераторы: Се ля ви
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Локальные функции, Бред или нет? 
:(
    Опции темы
Sanzec
  Дата 5.12.2008, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.10.2008

Репутация: нет
Всего: нет



Здравствуйте!

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

Код

int a;

int main()
{
    int b;
}


Из примера выше видно, что мы можем в любом месте программы обратиться к переменной a. К переменной b мы можем обратиться исключительно в функции int main(). Довольно удобно и практично использовать локальные переменные.

Почему бы не использовать по аналогии с локальными перменными, локальные функции? Все мы прекрасно знаем, что глобальные переменные делают код очень плохим. Так почему же мы все используем глобальные функции? Теперь пример:

Код

int main()
{
    int result = Plus(10, 5);

    int Plus(int a, int b)
    {
        return a + b;
    };
    
    int Minus(int a, int b)
    {
        return a - b;
    };
}


Локальные функции должны обладать свойствами локальных переменных. Следовательно, локальные функции будут обладать теми же достоинствами что и локальные перменные. Мне это идея очень нравится. Кто что думает о таком подходе? Может такое используется в каком-нибудь экзотическом языке? Давайте обсудим.
PM MAIL   Вверх
Lazin
Дата 5.12.2008, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 1
Всего: 154



в С++ можно использовать локальные классы, вложенные ф-ии нельзя
PM MAIL Skype GTalk   Вверх
boevik
Дата 5.12.2008, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: нет
Всего: 35



Объявления class-а с private functions, по моему даст такой же эффект как описанные локальные функции.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Sanzec
Дата 5.12.2008, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.10.2008

Репутация: нет
Всего: нет



Не всегда использование ООП оправдано. И все таки, все переменные в том же С++ - локальные, а функции - только глобальные. Как мне кажется, неправильно. Реализация таких функций была бы отличным инструментом.  Например, в системном программировании.
PM MAIL   Вверх
source777
Дата 5.12.2008, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(Sanzec @  5.12.2008,  21:34 Найти цитируемый пост)
Локальные функции должны обладать свойствами локальных переменных. Следовательно, локальные функции будут обладать теми же достоинствами что и локальные перменные. Мне это идея очень нравится. Кто что думает о таком подходе? 

Мне эта идея тоже нравится, плодотворно использую её уже не первый год. Тут главное применять локальные функции с умом, там где это действительно полезно и украшает решение. 

Цитата(Sanzec @  5.12.2008,  21:34 Найти цитируемый пост)
Может такое используется в каком-нибудь экзотическом языке? 
Даже не знаю, что на это сказать... А Delphi, C#, Ruby по-твоему экзотические языки? Во всяком случае в них есть поддержка локальных функций, кроме того данная фича есть во всех языках, поддерживающих функциональную парадигму программирования, там они называются лямбда-выражениями.

Код

procedure TForm1.FormCreate(Sender: TObject);
  function f(x: real):real; // локальная функция
  begin
    result:= x*x;
  end;
begin
  Caption:= FloatToStr(f(5));
end;


Код

        static void Main(string[] args)
        {
            Func<int, int, int>
                Plus = (a, b) =>
                           {
                               return a + b;
                           }; // локальная функция Plus 

            int result = Plus(10, 5);
        }



Это сообщение отредактировал(а) source777 - 5.12.2008, 23:08


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Lazin
Дата 5.12.2008, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 1
Всего: 154



Цитата(Sanzec @  5.12.2008,  22:25 Найти цитируемый пост)
Не всегда использование ООП оправдано. И все таки, все переменные в том же С++ - локальные, а функции - только глобальные. Как мне кажется, неправильно. Реализация таких функций была бы отличным инструментом.  Например, в системном программировании. 

в с++ есть анонимные пространства имен, пишите ваши ф-ии туда smile 
Код

namespace
{
    void local_function()
    {
        .....
    }
};

к тому-же не забываем про срр файлы, там то-же можно скрывать реализацию, ищи в гугле "идиома pimpl"
ps
лично мне не в с++ не хватает сопрограмм...
PM MAIL Skype GTalk   Вверх
source777
Дата 5.12.2008, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



В принципе многие достижения цивилизованных ЯП(в том числе и лямбда-выражения) доступны в С++ через Boost, синтаксис конечно тошнотворный, но в крайнем случае лучше, чем ничего.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
JackYF
Дата 8.2.2009, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Вложенные функци также есть в С99, ЕМНИП.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила раздела "Философия программирования":
Се ля ви

Форум "Философия программирования" предназначен для обсуждения вопросов, так или иначе связанных с философскими аспектами разработки ПО:

• вопросы перспективного развития методов написания ПО;

• изменяющиеся языки и методологии программирования;


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Философия программирования | Следующая тема »


 




[ Время генерации скрипта: 0.1072 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.