Pull to refresh

Comments 8

Казалось бы есть слово interface но зачем-то понадобилось его заменить на protocol.
Видимо не хотели избежать проблем так как слово interface начинается на букву i?

Ну как сказать, быстрый поиск дает следующее определение:

Протокол — набор правил, соглашений, сигналов, сообщений и процедур, регламентирующий взаимодействие между сопрягаемыми объектами.

И вот такое определение:

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

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

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

Вообще есть некоторый бардак в терминологии, в разных языках словами "интерфейс", "протокол", "трейт" и даже "миксин" называются разные вещи. Интерфейсы Go отличаются от таковых в C/C++/C#/Java, тем что в Go они структурно типизированы и реализуются неявно, а в большинстве языков - номинативно и требуется явная реализация. По "трейтам" вообще нет единого согласия, хотя то что в Swift больше на них похоже. Все это, вообще говоря, интересная тема для исследования.

Я в последнее время, в основном, ориентируюсь на Swift, для меня это некий фаворит. Не с позиции слепой любви, много с чем работать приходилось, а вполне себе с мотивацией. Не уверен конечно, что мотивация претендует на звание «адекватной», но для меня ее хватает. Заключается она в следующем.

Компания Apple стоит у истоков компьютеростроения, у них единственных кроме Microsoft есть своя операционная система,а на мобильном поприще так они вообще многих похоронили. Проектируют процессоры, классный софт и т.д.. В общем я к чему это пишу, я полагаю там в обязательном порядке есть крутая команда Uber специалистов в разработке. Язык достаточно новый. Разрабатывала команда далеко не глупых людей. Если уж кто и учел современные тенденции, возможности и т.д. так это Apple в момент разработки языка. Пускай он молодой, но уже обладает и достаточной популярностью и возможностями. Возможности максимально логичные и продуманные. Не без косяков конечно, но это минусы обратной совместимости. Настанет время и Objective-C уйдет в прошлое, а Swift по настоящему раскроется.

Это конечно все демагогия, как уже писал выше сколько людей, столько и мнений. Но мое предпочтение на сегодня Swift и как Вы писали уже, терминология в Swift, по моему внутреннему компасу, отвечает всем требованиям. Было бы время, я бы с удовольствием и с головой погрузился бы в это (исследование), век живи, век учись так сказать, чтобы оперировать какими либо данными, а сейчас это чисто интуитивное ощущение.

На самом деле, ещё непонятно, кто кого и чем заменил.

Swift унаследовал термин протокол от Objective-C. Если верить Википедии, в Objective-C протоколы были добавлены в компании NeXT, которая просуществовала с 1985 по 1996 год (потом была куплена Apple). А первая версия Java вышла только в том самом 1996, опять же, если верить википедии.

Выходит, протоколы появились раньше чем интерфейсы и это инженерам Sun Microsystems зачем-то понадобилось заменить термин.

Другое дело, что Java захватила мир, а Objective-C так и остался нишевым. Но тут уж ничего не поделать.

Использование протоколов вместо дженериков - звучит как костыль)

Но в любом случае, как Я заметил, протоколы чаще всего используют для того, чтоб создавать зависимости от абстракции, а не от конкретных типов, то есть, к примеру при архитектуре MVVM, мы всегда для ViewModel'и пишем протокол, в котором определяем, что должна уметь наша ViewModel, например ViewModelType, и соответственно реализуем протокол, в контроллере уже мы получаем нашу ViewModel как объект, который удовлетворяет протоколу ViewModelType.

Я ожидал это увидеть тут, вместе с другой информацией, но, к сожалению не увидел этого. В любом случае статья интересная!

Про дженерики я уже готовлю материал, Вы верно подметили.. но учитывайте, что подача и материал рассчитаны на усвоение т.е. для новичков. Я многое упростил и в целом код весьма простой. А на то, что протоколы вместо дженериков… ну не знаю. Использовать их (дженерики) без связанных типов, которые как раз таки обеспечиваются протоколами, практически не имеет смысла, разве что, при разборке json в модель, а вот польза протоколов даже без дженериков, неоценима. За сим, мое мнение - протоколы, важнее нежели дженерики.

что подача и материал рассчитаны на усвоение т.е. для новичков.

Огромное спасибо за это. А то при ознакомлении с туром по свифту с свифтбука не врубился вообще что такое протоколы и с чем их едят.

Sign up to leave a comment.

Articles