Почему C# является функциональным языком программирования?

viewDidLoad вызывается один раз. Если вы используете навигационный контроллер и выполняете резервный контроллер, этот метод viewDidLoad никогда не будет вызван. Пока вы снова не создадите этот ViewController (т. Е. [NavContoller pushViewController]). Если ваши данные api никогда не изменят жизненный цикл этого контроллера просмотра, это лучшее место для вызова вашего API. Но если ваши данные api необходимо часто звонить (т. назад и push.forth этот контроллер представления], тогда вы не должны вызывать api здесь.

viewWillAppear: перед представлением контроллера контроллера. Если вы вызываете вас api внутри этого метода, пользовательский интерфейс будет стекаться до завершения загрузки данных. который выглядит странно. Перед загрузкой представления viewController вызывается этот метод «viewWillAppear». Именно по этой причине это имя «viewWillAppear». Это означает, что это представление будет загружаться через некоторое время (т. Е. Через несколько секунд). Если вы вызовете свой api здесь после того, что произойдет, проанализируем. Скажем, ваш ответ возврата api через 10 секунд. Затем UI замерзнет / застрянет в течение 10 секунд, и через 10 секунд вы увидите ваше мнение.

viewDidAppear: после завершения отображения контроллера представления. Поэтому вам необходимо вызвать ваш API загрузки внутри этого метода.

32
задан Mihai Limbășan 26 December 2008 в 13:30
поделиться

8 ответов

C# одолжил много функций от ML и Haskell, например:

  • C# 2.0 принес нам параметрический полиморфизм (или "дженерики"). Я услышал, что Dom Syme, один из создателей F#, был в основном ответственен за реализацию дженериков в BCL.NET.

  • C# 2.0 также позволяет программистам передавать и функции возвратов как значения для функций высшего порядка и ограничил поддержку анонимных делегатов.

  • C# 3.0 и 3,5 улучшенных анонимных функции поддержки для истинных закрытий.

  • LINQ можно считать собственной разновидностью C# пониманий списка.

  • Анонимные типы похожи на приближение записей ML

  • , Вывод типа является данным.

  • я не знаю о Вас, но методы расширения C# очень много походят на классы .

    типа Haskell
  • был большой разговор о "динамическом" ключевом слове в C# 4.0. Я не на 100% уверен в его деталях реализации, но я абсолютно уверен его попытка использовать структурный ввод , а не позднее связывание для сохранения безопасности времени компиляции C#. Структурный ввод примерно эквивалентен "утиному вводу для статических языков", это - функция, которой Haskell и хакеры ML пользовались в течение многих лет.

Это не должно говорить, что C# является языком функционального программирования. Ее все еще недостающие важные функции, такие как сопоставление с образцом, оптимизация последнего вызова, и список и литералы кортежа. Кроме того, идиоматический C# существенно обязателен с тяжелой зависимостью от изменяемого состояния.

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

43
ответ дан 27 November 2019 в 17:33
поделиться

Там не будучи никаким строгим определением "Языка OO", "Функциональный Язык", "Процедурный язык", можно привести аргументы, что любой язык соответствует главным образом любой классификации; можно записать процедурный Java, объектно-ориентированный C и функциональный C++. Я обычно использую классификацию, базирующуюся вокруг того, что основные семантические функции поддерживают, наряду с общей практикой разработки. Хороший способ посмотреть на это состоит в том, чтобы исследовать встроенные и популярные платформы и видеть то, что разрабатывает, они используют.

Функциональные языки главным образом определяются как те, которые имеют примитивы функции первого класса со стилями разработки, которые используют их для сокращения сложности с идиомами как "карта". Еще одна типичная функция является сопоставлением с образцом, но я не рассматриваю это как исключительно функциональное. "Чистые" функциональные языки также не имеют никаких побочных эффектов, но это не обязательно (см., насколько нечеткий эти понятия? :).

Так, что такое C#? Ну, это имеет примитивы стиля функции первого класса с делегатами (и получил лучшую синтаксическую поддержку стиля с анонимными делегатами и лямбдами). Это делает это функциональным? Возможно, если Вы пишете в функциональном стиле. Платформа использует этот стиль? Нет, не действительно.

По сути, я не классифицировал бы C# как функциональный в общем обсуждении - это, в лучшем случае мультипарадигма, с некоторым функциональным ароматом.

38
ответ дан 27 November 2019 в 17:33
поделиться

можно найти замечательный обзор относительно функций языка в презентации от Andrew Kennedy (от Исследования MS) названным , C# является языком функционального программирования . Моя статья приблизительно функциональное программирование в C# и F# дает обзор от более высокого уровня perspecitve (особенно к концу).

T.

3
ответ дан 27 November 2019 в 17:33
поделиться

Я главным образом соглашаюсь с другими здесь, кто говорит, что C# лучше описан как мультипарадигма, чем функциональный. Но я добавил бы к примерам функциональных возможностей в C# LINQ, первоклассной и относительно понятной системе для записи монад. В то время как чисто функциональные языки не требуют использования монад, пример Haskell показал, что они могут быть чрезвычайно полезными. Все же они - одна из самых твердых вещей, идут схватывание для многих людей, плохо знакомых с Haskell. В C#, с другой стороны, многие люди пишут запросы LINQ в эти дни, даже не понимая, что они пишут монады.

3
ответ дан 27 November 2019 в 17:33
поделиться

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

var sum = data.Sum(x=>x.SomeProp);

и т.д.

можно записать большинство функций высшего порядка с помощью лямбд / делегаты. Вывод типа не вполне , то же как чистые функциональные языки, такие как F#, но универсальный вывод типа C# все еще довольно хорошо (особенно в C# 3.0).

Это особенно верно в.NET 3.5 и C# 3.0, где LINQ проявляет высоко функциональный подход ко многим проблемам. Но можно все еще использовать функциональные аспекты C# с.NET 2.0 и C# 2.0. Это просто легче с C# 3.0 и лямбдами;-p

На самом деле, C# прагматичен язык программирования. Это имеет целью позволять использовать много парадигм, не наказывая Вас ужасно, если Вы захотите сделать что-то другое.

9
ответ дан 27 November 2019 в 17:33
поделиться

Указатели функции являются другой функцией, которую C# имеет в функциональной категории.

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

От Функциональное программирование :

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

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

6
ответ дан 27 November 2019 в 17:33
поделиться

C# имеет некоторые функциональные функции языка, закрытия, например. Библиотеки.NET не записаны в функциональном стиле, таким образом, на практике C# не является функциональным языком. Почти все выполняется с мутацией. Типы набора все изменяемы.

1
ответ дан 27 November 2019 в 17:33
поделиться

Это основные моменты, которые делают C # функциональным 1-выражения ламбы 2-методы расширения Вывод 3-го типа 4-Инициализаторы объектов и коллекций 5-закрытие 6-анонимные типы 7-Linq

0
ответ дан 27 November 2019 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: