LINUX.ORG.RU

Ищу ЯП


0

0

С нынешнеми ЯП я не знаком (я больше по сям и паскалям) и с программированием моя деятельность (пока) не связана интересуюсь вот каким вопросом:

Есть у меня переменная int x и две функции void setX(int) и int getX(). Есть-ли в совремменных ЯП такие конструкции которые позволяют связать с переменной x первую ф-цию как "мутатор" а вторую как "ацессор"?

То есть если я например пишу в коде:

x= a+b;

то компилятор(или препроцессор) преобразуют эту строку в:

setX(a+b);

(и, соответственно "a= x + b;" в "a= getX() + b;") и уже после этого компилирует. То есть чтобы можно было писать код лаконично но при этом выполнять сложные действия (например, поместить в функцию setX() контроль за допустимыми значениями для переменной).

P.S. Помнится нечто подобное было в object pascale'е (тем что шёл с 5-м дельфи) но меня интересует возможость нормально кодить под линукс и значительно меньшая перегруженность рюшечками.

★★

В C++ можно сделать класс, и определить операцию сложения. Конечно не так красиво, но суть та же:)

anonymous
()
Ответ на: комментарий от anonymous

>В C++ можно сделать класс, и определить операцию сложения. Конечно не так красиво, но суть та же:)

Операцию сложения я здесь привёл для примера. Это может быть и вычитание и деление и вобще сложная формула, где x и другие переменные могут встречатся много раз. Суть в том чтобы подменять саму переменную на функцию "мутатор" там где происходит присваивание значения этой переменной или на функцию "ацессор" когда надо получить её значение. Суть совсем не в переопределении оператора.

cPunk ★★
() автор топика

Подобные штуки называются getter и setter и есть во многих языках. Например, в питоне.

Deleted
()

В обжект-паскале красиво реализовано

anonymous
()

Такие вещи позволяют делать языки наподобие Ruby, в которых есть возможность метапрограммирования.

smh ★★★
()

Опасно и чревато. Может резко снизить читаемость (понимаемость) кода.

svu ★★★★★
()

Обычно это называется property.

Сколько я видел, если их в явном виде нет, никто от этого не страдает. В Java, в Eiffel вместо свойств пары get/set, и ничего. Я тоже думаю, нормально.

В потомке Eiffel под названием Sather свойства-таки есть, но кто сейчас знает про этот Sather?

В C++ можно определить эту переменную типа специального класса, но использовать везде, как если бы она была int. В этом вспомогательном классе определить operator int и operator =

> но меня интересует меньшая перегруженность рюшечками

ИМХО это как раз и есть рюшечка

Nihilist
()
Ответ на: комментарий от Nihilist

> обоснуйте (c)

Определение того, что называется "современным ЯП" - в студию!

tailgunner ★★★★★
()
Ответ на: комментарий от Nihilist

Я думаю достаточно взять определение функционального языка программирования. Хотяб вот это http://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD...

Придумать вменяемое определение современного языка программирования (ключевое слово современный) и убедится, что второе не является подмножеством первого :)

Burbaka ★★
()
Ответ на: комментарий от Burbaka

>Придумать вменяемое определение современного языка программирования (ключевое слово современный) и убедится, что второе не является подмножеством первого :)

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

cvb
()
Ответ на: комментарий от Miguel

>В современных языках нет переменных.

+1

imp ★★
()
Ответ на: комментарий от Burbaka

Единственно вменяемое определение _современного_ ЯП: "непрерывно переизобретаемый велосипед, требующий непрерывного апгрейда версий для срочного латания галимых косяков в дизайне и имплементации".

bugmaker ★★★★☆
()
Ответ на: комментарий от Burbaka

> Придумать вменяемое определение современного языка программирования (ключевое слово современный) и убедится, что второе не является подмножеством первого :)

Я даже боюсь подумать, что же за языки вдруг окажутся "современными", если среди них нет ни одного функционального.

Nihilist
()
Ответ на: комментарий от tailgunner

> То есть определния мы не дождемся? 8)

Зыбкое это дело. Проще сказать, какие языки современными не являются. PL/1, Oberon-1. Потому что эволюционировали во что-то другое, и нет смысла поддерживать оригинал.

В моём понимании современный развитый^Wстандартизованный ЯП -- это такой, чья последняя стандартизация была не раньше, чем двенадцать лет назад. Декада -- это примерный промежуток, в течение которого регулярно пересматриваются стандарты на ЯП. В середине этой декады обычно ещё вносятся исправления против обнаруженных недостатков.

А вот для развивающегося^Wнестандартизованного языка крайний срок поменьше надо назначить. Делфя обновляется раз в год. Года два для нестандартизованного надо брать, наверное.

Идеального ЯП не бывает, так что у каждого ЯП есть, в какую сторону его улучшать. Если ожидаемого улучшения не наблюдается, значит, он лишился поддержки, и из числа современных выбывает. Вроде логично.

Nihilist
()
Ответ на: комментарий от Nihilist

> Я даже боюсь подумать, что же за языки вдруг окажутся "современными", если среди них нет ни одного функционального.

Почему нет, есть немного :)

Burbaka ★★
()
Ответ на: комментарий от tailgunner

:) Люблю лоровские споры на уровне терминологии. Давайте начнем с этого "современным можно назвать такой ЯП, который в существенной мере отвечает текущим потребностям индустрии программного обеспечения (индустрии в широком смысле, не обязательно ентерпрайз :))".

Burbaka ★★
()
Ответ на: комментарий от Burbaka

> :) Люблю лоровские споры на уровне терминологии.

Да я разве спорю? Я просто пытаюсь объяснить благородным донам, что их красноглазие^Wэкстремизм "в современных языках нет переменных" неуместен в текущей жизненной ситуации 8)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Я понимаю, но имхо занятие это неблагодарное :)

Burbaka ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.