Smalltalk es un lenguaje increíblemente compacto y sigue siendo uno de los lenguajes más puros orientados a objetos. Objective-C es un compromiso pragmático entre Smalltalk y C, lo que genera algunas diferencias muy sustanciales. Por ejemplo, en Smalltalk todo es un objeto, incluso números simples, y cada manipulación de un objeto se realiza mediante el envío de mensajes. Los mensajes se evalúan en el mismo orden, independientemente de su nombre. Por ejemplo, lo siguiente:
8 + 9/23 + 16 * 8
se evalúa en estricto orden de izquierda a derecha debido a que los operadores '+', '/' y '*' no tienen un significado especial para el lenguaje de estar a sólo los mensajes que se transmiten al número objetos.
Objective-C agrega objetos de estilo Smalltalk a C pero también es un superconjunto estricto de C que conserva los tipos primitivos de C y los operadores incorporados. Entonces, en Objective-C, el orden matemático normal de operaciones se aplicaría a la expresión anterior: la división y la multiplicación se realizarían primero, las adiciones posteriores.
Aprender C es absolutamente esencial para una comprensión completa de Objective-C. Objective-C es un superconjunto estricto de C y explícitamente usa exactamente la misma sintaxis y semántica hasta donde llegan. Se injerta el concepto de objetos en C en virtud de la capacidad de C para retener un puntero a una cosa sin saber cómo aplicar ninguna operación a la cosa. A continuación, amplía la sintaxis C para proporcionar un medio para publicar mensajes en objetos y para declarar e implementar los mensajes que un objeto puede recibir.
Gran parte del diseño general del tiempo de ejecución de Objective-C, especialmente cuando se combina con Cocoa, proviene directamente de Smalltalk, incluido el concepto de selector, el uso de metaclases como fábricas para instancias de clases, la jerarquía y el sistema de herencia, la división de model-view-controller (un original de Smalltalk, aunque ahora casi omnipresente) y muchos de los mensajes definidos en las colecciones y los objetos estándar.
Por fuera de mi cabeza, Smalltalk también difiere mucho en su sistema de control de flujo y tiene una idea similar pero sutilmente diferente de un "bloque" (aunque las implementaciones más nuevas han puesto a los dos en línea). Apple ha implementado bloques como una extensión en el nivel C que es utilizado por muchos de los métodos más nuevos en objetos Objective-C.
Dicho todo esto, el libro Goldberg Smalltalk-80 está extremadamente bien escrito, es fácil de leer y el lenguaje es tan simple que puedes aprender todo el idioma en solo dos o tres capítulos. La mayor parte de la complejidad es absorbida por los objetos disponibles en el tiempo de ejecución, y obviamente eso no se transfiere. El beneficio para usted es que el material ideológico sobre objetos y tiempos de ejecución termina muy separado de los detalles impresos. Por el contrario, C hace cosas como el control de flujo y la aritmética, una característica del lenguaje, lo que significa más sintaxis y más para leer antes de que realmente sientas que sabes lo que está pasando.
Por lo tanto, en conclusión: el libro Smalltalk-80 (el violeta) definitivamente vale la pena leerlo y es extremadamente útil, pero no necesariamente del todo relevante. Aprender C es esencial en cualquier caso; mis referencias a K & R son para comparar.
No conozco Smalltalk, así que realmente no me siento capacitado para dar una respuesta que garantice cuánto podría o no podría ayudar a un desarrollador de Objective-C. Dicho esto, creo que vale la pena señalar que ** será * mucho * más útil sentirse cómodo con los conceptos de programación orientada a objetos en general en lugar de tratar de aprender dos idiomas diferentes al mismo tiempo. ** –
Me pregunto cómo usar Obj-C sin aprender C antes ... Como es una parte de Obj-C. – Vovanium