LINUX.ORG.RU

обращение к полям класса

 ,


0

3

Вы только не пугайтесь, я опять взялся за старое (пишу свой яп когда делать нечего). Не могу определиться чем заменить питовское «self.some.attr» . Мне не нравится «self».

Варианты:

1) .some.attr
2) @some@attr
3) @some.attr

Чтобы выбрали ты, лор? Голосуйте или предлагайте свои варианты.

Я тяготею к третьему варианту. В таком случае «self.attr» выглядит просто как «@attr» что, имхо, клёво выглядит. Но тогда, правда, не получится взять синтаксис декораторов у питона, а он мне нравится.

cast tailgunner

★★★★★

Не могу определиться чем заменить питовское «self.some.attr»

Обращение к полю из методов класса? Как, например, в с++, т.е. без обязательного дебильного self и т.п.

mashina ★★★★★
()
Последнее исправление: mashina (всего исправлений: 1)
Ответ на: комментарий от loz

что объекты с доступом к полям суть просто структуры данных и это совсем не то что позволяет перейти на новый уровень.

Странно. А чем они должны быть?

«новый уровень» (после смоллтока) — это self. Лучше чем Self-way уже ничего придумать нельзя, это предел.

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

суть просто структуры данных

Ну, точней говоря, они должны быть, ИМХО, акторами. Но структуты данных — это частный случай акторов, так что все ок с этим.

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

объекты с доступом к полям суть просто структуры данных

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

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

это всего лишь субъективная точка зрения, в идеологии смолтолк считает что это запрос-ответ и отправка сообщений.

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

это всего лишь субъективная точка зрения, в идеологии смолтолк считает что это запрос-ответ и отправка сообщений.

И что? У тебя хеш-таблица — это такой же объект, который принимает сообщение. Плюс делегирование, как основа наследования.

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

Это что такое?

Это чтобы когда ты обращаешься к my_object.some_property тебе не вовращалось значение из памяти, а вызывалась бы функция my_object.some_property_actual_implementation() и вовращалось бы значение, которое она вернёт.

https://ru.wikipedia.org/wiki/Свойство_(программирование)

proud_anon ★★★★★
()

___self___.some.atr ;)

Ёsome.attr ;)

;)some.atr

;some.atr

:some.atr

[`~!@#$%^&*-:] по вкусу

the.some.atr

этот.some.atr :)

. some.attr

anonymous
()

Зависит от того, что лучше вписывается в язык. Так-то можно хоть $attr.

клёво выглядит

Клёв - это по-нашему. А всякие там interface consistency, cognitive load и прочее - это выдумки изнеженных буржуев.

tailgunner ★★★★★
()

чем плох self ? ну вообще первый вариант как-то логичнее из этих 3х, и к точкам все привыкли, и точка без контекста перед ней берёт за контекст наивысшую область видимости в рамках класса (собственно, сам класс)

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

okay, тогда завтра создам тему про синтаксис в целом.

interface consistency, cognitive load и прочее - это выдумки изнеженных буржуев.

Правда здорово что я могу описать простые вещи понятными словами? ^_^

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

без обязательного дебильного self и т.п.

Явный this в питонячьих методах это же прекрасно. Не надо думать над контекстом как в том же js.

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

Странно. А чем они должны быть?

Если я правильно понял - объектами, с которыми нужно общаться, а не просто залазить внутрь. Тут наверное больше идеи с которыми подходить к разработке, от низкоуровневых штук для хранения данных к более высокоуровневым, самостоятельным сущностям.

«новый уровень» (после смоллтока)

Я так понял он говорит что современное ООП взяло его объекты и перетянуло их на уровень структур, речь про уровень выше смолтолка не идет, это уже что-то больше чем просто язык, смотри видео)

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

Правда здорово что я могу описать простые вещи понятными словами? ^_^

Да. И так здорово, что все эти сложные вещи описываются одним словом «клёво» %)

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

чем плох self ?

Писанины много. Мне хочется писать выражения покомпактнее. Я попробовал писать в виде '@attr', мне понравилось. Обычно это не проблема, но, если писал на ocaml или haskell, то мог оценить удобство коротких имён. Или наоборот не оценить, хаскель плохо читается если код написан не тобой :).

Короче, когда у тебя красивые короткие имена полей/методов (prev, next, send, recv, iter, append, delete, whatever) то приписав к ним «self.» часто теряется вся красота. Конечно, программисты java вообще не поймут где проблема :).

Короче, это не ахти какая важная проблема, но сейчас я пишу ЯП на самом себе и надо таки определиться с первой версией синтаксиса. Вот и спросил.

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

это не ахти какая важная проблема

Если у тебя this неявный, запихивай атрибуты а локальный скоуп, плюс кейворд для резолва неоднозначностей (аля java/c++). Все эти префиксы (./@) только указывают на беспомощность автора.

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

Или у тебя динамическая типизация? Я забыл детали, тогда без синтаксиса для обращения к атрибуту будет тяжеловато, да)

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

Эм, я "->" для лямбд оставил...

this.attr?

Выглядит привычно.

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

___self___.some.atr ;)

М-м-м, секси.

Кстати, вместо self в питоне можно что угодно писать.

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

Конечно, программисты java вообще не поймут где проблема

В джаве-то никаких приписок и не надо.

anonymous
()

Self не нужен, как и переменные и классы. А вчера в офисе, мне преснился чудный сон, как будто я нырнул в море, и оно прератилось в SK комбинаторы, рыбы, водоросли, медузы, все из комбинаторов, даже небо, даже Аллах!.

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

Явный this в питонячьих методах это же прекрасно. Не надо думать над контекстом как в том же js.

Ну коли уж типичный питонист законченный овощ, то лучше было бы сделать явное обращение к глобальному контексту чем к локальному (т.е члены инстанса + класса) которого в коде методов обычно чуть ли не все 100%. Ибо в совокупности с PEP8 который, видимо, тоже делали люди не любящие думать, код превращается в гогно из «self.__» - аж три подхода сделали чтобы было максимально убого.

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

Все эти префиксы (./@) только указывают на беспомощность автора.

Да, но это только если поддерживается только лексический скоп. Если есть динамическое связывание, нужно, как правило, чтобы было либо явное указание на контекст (как в js, например, там не нужно 2 разных кейворда — this и self, достаточно одного this, а по дефолту — лексическое связывание), либо, какие-то правила разруливания.

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

Наилучшее решение, которое я видел — это Io. Там контекст зависит от определения, block — лексическое связывание, method — динамическое. Как следствие, в большинстве случаев явно ничего вообще указывать не надо, код сам знает, как ему связываться.

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

завтра создам тему про синтаксис в целом

no...

anonymous
()

_.attr

тогда для вложенных классов

_._.attr

Deleted
()

1) ес-но.

Я таким в молодости тоже страдал. Поначалу кажется ух как клево и оригинально... но потом выясняется что другим от этого мерзостно, и самому тоже мерзостно со времен становится.

Вот скажем неск лет назад для разборщика командной строки повесил справку на ?, расширенную справку на ?+. Казалось бы всяко короче чем --help топтать, доволен был. Не прошло и 5 лет как стал плеваться, в новой версии будет --help.

Так что не покушайся на святое, не плоди лишних сущностей. Чем ближе синтаксис твоего ЯП будет к существующим, тем проще будет им пользоваться;-)

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

В том и фишка, что он нахрен никому не нужен, потому можно любую синтаксическую жопу запилить.

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

кстати да - парсер должен соображать по отсутствию квалификатора, что это self ;) или this

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

some(attr(data))

Тогда уже this some attr :)

Ну, или более канонически this some p@ attr p@

KRoN73 ★★★★★
()

Я давно хочу, чтоб точка была просто оператором, то есть как-то так:

self . attr . field

И чтоб оно ругалось, когда оператор без пробелов.

И это просто было бы эквивалентом:

field(attr(self))
holuiitipun
()
Последнее исправление: holuiitipun (всего исправлений: 2)
Ответ на: комментарий от holuiitipun

Тип-то только как вывести этого оператора?

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

Самый обыкновенный оператор. Как, например, +, только другой. Не знаю как ещё можно объяснить эту очевидную вещь.

mashina ★★★★★
()

Первое коротко и понятно. Примерно так в Apple Swift к перечислимым типам можно обращаться — скажем, функция принимает третьим аргументом перечислимый тип Alignment, а кодер вместо «Alignment.VCenter» пишет просто «.VCenter».

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

Если я правильно понял - объектами, с которыми нужно общаться, а не просто залазить внутрь.

Возможность залазить внутрь важна для скорости выполнения. Большинство объектов не требует косвенного обращения к свойствам, а те, что требуют, во многих языках могут подменить простое обращение к свойству на вызов метода.

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

Если у тебя this неявный, запихивай атрибуты а локальный скоуп

Это плохо, приходится думать, откуда именно тот или иной символ был засунут в локальную область видимости. В том же питоне всё просто — если нет self, то либо это свободная функция, либо будет исключение.

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