Erlang не использует классы и наследование классов как основу языка. Программы состоят из модулей с функциями; данные представлены, например, кортежами, списками и maps. Легковесные процессы обмениваются сообщениями, но это не делает их экземплярами классов.
Назовите язык программирования, в котором нет классов
Пример — Erlang: код организован в функции и модули, а параллельная работа строится вокруг процессов и сообщений.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Подходящий пример — Erlang. В нём нет классов в привычном для Ruby или Java смысле: код организуют в функции, объединённые в модули.
-module(greeting).
-export([hello/1]).
hello(Name) ->
{hello, Name}.
После компиляции модуля вызов greeting:hello("Anna") вернёт кортеж {hello, "Anna"}. greeting здесь — имя модуля, hello/1 — экспортируемая функция с одним аргументом. Создавать экземпляр Greeting для вызова не требуется. Модули Erlang
Отсутствие классов не означает отсутствие способов структурировать программу. Данные можно представить кортежами, списками или maps, а операции над ними — функциями. Сопоставление с образцом помогает выбирать подходящую ветвь обработки.
Для параллельной работы Erlang использует изолированные легковесные процессы и передачу сообщений. Процесс можно использовать для хранения состояния сервиса, однако он не становится экземпляром класса с наследованием. Процессы и сообщения
На собеседовании достаточно назвать язык и объяснить, что используется вместо классов. Утверждение «все языки строятся на классах» неверно: классическое объектно-ориентированное программирование — лишь один из способов организации кода.