Почему функции не считаются именованным типом?

Это прямо из Руководства разработчика Swift.

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

У функций тоже есть имена, почему функции считаются составным типом, а не именованным?


person iwsnmw    schedule 19.01.2016    source источник


Ответы (2)


Функции имеют как имя, так и тип. Имя функции обозначает только имя этой функции; он не обозначает тип этой функции.

На самом деле имена и типы функций не зависят друг от друга:

  • Несколько функций с одним и тем же именем могут иметь разные типы, и
  • Несколько функций одного типа могут иметь разные имена.

Вот пример двух функций с одинаковым именем и разными типами:

func one(x: Double, y: Double) -> Bool {
    return true
}
func one(x: Double) -> Bool {
    return true
}

Составной тип первой функции one — это «функция, принимающая Double и Double и возвращающая Bool», а тип второй функции one — «функция, принимающая Double и возвращающая Bool».

Вот пример двух функций одного типа, но с разными именами:

func one(x: Double) -> Bool {
    return true
}
func two(x: Double) -> Bool {
    return false
}

Составным типом обеих функций является «функция, принимающая Double и возвращающая Bool». Обе функции one и two являются экземплярами этого составного типа.

person Sergey Kalinichenko    schedule 19.01.2016

Функции не являются типом, поэтому функции не считаются составным типом. Это также причина, по которой функций нет в этом списке.

Типы — это классы, перечисления и тому подобное. Функции близки к языку, а классы и тому подобное — это объектно-ориентированные способы работы.

person jbehrens94    schedule 19.01.2016
comment
Типы функций считаются составными типами согласно руководству разработчика. - person iwsnmw; 19.01.2016
comment
Функции не являются типом (как и переменные), но они имеют тип. И типы функций считаются составными типами, и OP хочет знать, почему. - person DarkDust; 19.01.2016
comment
Но это не значит, что функция является типом, возвращаемый тип может быть составным типом, верно? - person jbehrens94; 21.01.2016