Почему функции используют - (void), а не - (nil) в Obj-C? - PullRequest
1 голос
/ 27 марта 2011

В target-C я часто вижу функции, которые не возвращают ничего, объявленного как:

 - (void)myFunction {…

Но почему функции не объявлены с использованием nil, как это

 - (nil)myFunction {…

Разве они оба не возвращают "ничего"?

Ответы [ 3 ]

6 голосов
/ 27 марта 2011

void - ничто. nil это что-то (0).

Другими словами, возвращать ноль - это не то же самое, что возвращать ничего.

2 голосов
/ 27 марта 2011

Исторически в языках, принадлежащих (синтаксически) к семейству C-подобных языков, void указывает, что из функции не возвращается тип.

Точнее, так как переменные имеют (или принадлежат) данный тип , функции также имеют типы.Например, функция, которая возвращает тип int, это функция типа int или функция, тип которой равен int .То же самое, если она возвращает что-то еще.

Если функция ничего не возвращает - она ​​ничего не возвращает - к какому типу она принадлежит?У него нет типа, и тип void представляет такую ​​вещь.

Я не разбираюсь в Цели C, но если я правильно понимаю, nil - это typeless Идентификатор (или идентификатор любого типа), почти как встроенная реализация нулевого шаблона .

И null - это тип (void *), последний является указателем typeless , который может указывать на что угодно, как в C и C ++.

Таким образом, функция, которая возвращает nil, подразумевает, что ее тип является идентификатором любого типа.Не знаю, имеет ли это смысл.Так что тут и сейчас (nil)myFunction имеет тип, совершенно отличающийся от (void)myFunction, так как первый имеет один тип (любой тип?), Тогда как последний вообще не имеет типа.

Кроме того, nil являетсявстроенная постоянная.Возврат nill - это все равно, что сказать, что ваша функция возвращает определенное число, например ((1)myFunction).Это не имеет никакого смысла, не так ли?

0 голосов
/ 27 марта 2011

Void - это тип объекта. Пустота означает, что нет возвращаемого значения.
Нил это объект, а не тип. Это представляет пустое значение.

...