Size: a a a

2020 December 23

A

Andrey in pro.algorithms
Хуже него только foo и bar
источник

P

Pavel in pro.algorithms
Dmitry Kozyrev
xyz = {4,6,8};
func add(xyz) {
  return xyz.getX() + xyz.getY() + xyz.getZ();
}
Жена сказала что теперь она вообще не понимает что написано 🤷‍♂
источник

P

Pavel in pro.algorithms
Почему бы не переписать на что-то в стиле cobol 😄

CREATE OBJECT my_point
SET 4 TO x OF my_point
SET 6 TO y OF my_point
SET 8 TO z OF my_point

DECLARE PROCEDURE sum
TAKES PARAMETER point
RESULT IS point.x + point.y + point.z
END PROCEDURE

RUN sum USING my_point PUT RESULT TO sum_result
DISPLAY sum_result

UPD: поправил после ещё одного юзертеста, + замечание Andrey
UPD2: не, это тоже не понятно, я сдаюсь
источник

A

Andrey in pro.algorithms
add = sum
источник

A

Andrey in pro.algorithms
Да я не это имел в виду
источник

P

Pavel in pro.algorithms
Andrey
Да я не это имел в виду
А что?
источник

A

Andrey in pro.algorithms
Что в функциональных языках, по сравнению с cobol (да и не только с ним), лишних слов гораздо меньше
Но получилось не слишком удачно
источник

P

Pavel in pro.algorithms
Andrey
Что в функциональных языках, по сравнению с cobol (да и не только с ним), лишних слов гораздо меньше
Но получилось не слишком удачно
Да, я добавил много отсебятины "чтоб было понятнее", но стало хуже. Наверно проще научить программировать человека чем пытаться написать универсально понятный синтаксис 🤷‍♂
источник

m

magras in pro.algorithms
Defragmented Panda
есть люди без упора в программирование?

какой вам нравится синтаксис?

obj.x=4
obj.y=6
obj.z=8
func add(obj){
return obj.x+obj.y+obj.z}

как бы вы записали это, чтобы это было понято любым человеком, без знания программирования?

сохраняя структуру (возможность подать в функцию другой обьект, изменяя 1 слово)
В хаскелле это можно записать например так если использовать tuple вместо объекта.
xyz = (4, 6, 8)
add (x, y, z) = x + y + z


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

DP

Defragmented Panda in pro.algorithms
Pavel
Как программист я не очень понимаю пример, так как тут намешано всего: присваиваются переменные какого-то объекта, потом объявляется функция с аргументом с таким же именем как этот объект. Не очень понятно, что вообще написано, то ли это кусок определения объекта, и 4, 6, 8 это дефолтные значения полей. То ли это вычисления и func add это что-то вроде лямбды которая вызывается на месте. В общем сложно что-то предположить.

Жена прочитала, сказала что ну да надо сложить 4, 6 и 8.
Что такое obj и add высказать предположений не смогла.
отлично, спасибо

надо будет подумать над этим
источник

DP

Defragmented Panda in pro.algorithms
Dmitry Kozyrev
xyz = {4,6,8};
func add(xyz) {
  return xyz.getX() + xyz.getY() + xyz.getZ();
}
тут явно виден упор в программирование )

xyz.getX()
тут и обьект-свойство, и свойство-переменная, и вызов функции без аргументов
источник

DP

Defragmented Panda in pro.algorithms
Pavel
Почему бы не переписать на что-то в стиле cobol 😄

CREATE OBJECT my_point
SET 4 TO x OF my_point
SET 6 TO y OF my_point
SET 8 TO z OF my_point

DECLARE PROCEDURE sum
TAKES PARAMETER point
RESULT IS point.x + point.y + point.z
END PROCEDURE

RUN sum USING my_point PUT RESULT TO sum_result
DISPLAY sum_result

UPD: поправил после ещё одного юзертеста, + замечание Andrey
UPD2: не, это тоже не понятно, я сдаюсь
слишком много текста имхо

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

мне важно придумать синиаксис который легко понять концептуально (тут твой пример подходит) но так же легко понять визуально (тут твой пример ужасен. очень много символов на простое присваивание)
источник

DP

Defragmented Panda in pro.algorithms
Pavel
Да, я добавил много отсебятины "чтоб было понятнее", но стало хуже. Наверно проще научить программировать человека чем пытаться написать универсально понятный синтаксис 🤷‍♂
это было бы очень грустно

я все же надеюсь есть какая-то идея которая понятна людям интуитивно, без обучения.

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

DP

Defragmented Panda in pro.algorithms
magras
В хаскелле это можно записать например так если использовать tuple вместо объекта.
xyz = (4, 6, 8)
add (x, y, z) = x + y + z


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

пока лучшее что я видел это dynamic scope. идея концептуально противоположная высоким идеалам хаскеля

в джаваскрипте есть конструкция with

car.speed=4
car.capacity=6
human.space=1
human.weight=80

with(car) with (human){
speed*speed*weight*capacity/space/2
}

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

это кардинально сокращает обьем кода. но считается самым грязным трюком даже по меркам джаваскрипта. даже eval не отменяли а эта конструкция считается недопустимой в новых версиях ('use strict'), в модулях

ее проблемой считают затенение имен в случае совпадений имен свойств обьектов. ну и проблемы присваивания (какому обьекту приписать новое свойство?)
источник

m

magras in pro.algorithms
Defragmented Panda
обьект имеет десятки свойств. присать все - ужасно громоздко. выбирать нужные - все еще заваливает экран лишними деталями в тексте

пока лучшее что я видел это dynamic scope. идея концептуально противоположная высоким идеалам хаскеля

в джаваскрипте есть конструкция with

car.speed=4
car.capacity=6
human.space=1
human.weight=80

with(car) with (human){
speed*speed*weight*capacity/space/2
}

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

это кардинально сокращает обьем кода. но считается самым грязным трюком даже по меркам джаваскрипта. даже eval не отменяли а эта конструкция считается недопустимой в новых версиях ('use strict'), в модулях

ее проблемой считают затенение имен в случае совпадений имен свойств обьектов. ну и проблемы присваивания (какому обьекту приписать новое свойство?)
Я бы сказал, что это проблемы архитектуры, а не языка. Вряд ли функции на самом деле одновременно требуется работать с объемом двигателя, количеством посадочных мест и текущей температурой салона.

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

DP

Defragmented Panda in pro.algorithms
magras
Я бы сказал, что это проблемы архитектуры, а не языка. Вряд ли функции на самом деле одновременно требуется работать с объемом двигателя, количеством посадочных мест и текущей температурой салона.

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

то что я предлагаю менее универсально

но всеравно код используется около 1 раза

т.е. считай это чем-то типа power point презентации, а не ядра операционной системы

мне интересно обменять часть универсальности на возможность людям читать эту "презентацию" чуть быстрее.

я применяю этот синтаксис в онлайн калькуляторе. смысл которого - показать другому свои (простые!) вычисления.
источник

m

magras in pro.algorithms
Defragmented Panda
не спорю

то что я предлагаю менее универсально

но всеравно код используется около 1 раза

т.е. считай это чем-то типа power point презентации, а не ядра операционной системы

мне интересно обменять часть универсальности на возможность людям читать эту "презентацию" чуть быстрее.

я применяю этот синтаксис в онлайн калькуляторе. смысл которого - показать другому свои (простые!) вычисления.
Прелесть хороших абстракций в том, что они не только универсальные, но и упрощают понимание кода.

kinetic_energy m v = m * v * v / 2

m = weight human * capacity car
kinetic_energy m (speed car)

Мне не обязательно смотреть определение kinetic_energy, оно очевидно из имени, Хорошее имя хорошей абстракции очень сильно упрощает чтение кода.

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

Возможно это и не плохо что синтаксис не позволяет красиво оформлять плохой код?
источник

DP

Defragmented Panda in pro.algorithms
magras
Прелесть хороших абстракций в том, что они не только универсальные, но и упрощают понимание кода.

kinetic_energy m v = m * v * v / 2

m = weight human * capacity car
kinetic_energy m (speed car)

Мне не обязательно смотреть определение kinetic_energy, оно очевидно из имени, Хорошее имя хорошей абстракции очень сильно упрощает чтение кода.

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

Возможно это и не плохо что синтаксис не позволяет красиво оформлять плохой код?
твой вариант не предполагает возмодности одним словом менять какой транспорт и какой вид пассажиров мы расматриваем

я понимаю что я могу всегда схлопнуть функцию для конкретного применения. но я не хочу так делать. это сильно ограничивает того кто составляет презентацию.

т.е. да, твой вариант идеален для читателя. если составитель готов потратить в разы больше времени на составление формул с постоянно меняющимися условиями.

я хочу баланс затрат времени и составителя (он может поменять одним словом вид транспорта и вид пассажиров) и читателя (он понимает что тут считается)

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

итого:
я не хочу чтобы страдал читающий (никаких car.capacity*human.weight)
но я так же не хочу чтобы страдал составляющий (никаких m=car.capacity*human.weight)
источник

m

magras in pro.algorithms
Defragmented Panda
твой вариант не предполагает возмодности одним словом менять какой транспорт и какой вид пассажиров мы расматриваем

я понимаю что я могу всегда схлопнуть функцию для конкретного применения. но я не хочу так делать. это сильно ограничивает того кто составляет презентацию.

т.е. да, твой вариант идеален для читателя. если составитель готов потратить в разы больше времени на составление формул с постоянно меняющимися условиями.

я хочу баланс затрат времени и составителя (он может поменять одним словом вид транспорта и вид пассажиров) и читателя (он понимает что тут считается)

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

итого:
я не хочу чтобы страдал читающий (никаких car.capacity*human.weight)
но я так же не хочу чтобы страдал составляющий (никаких m=car.capacity*human.weight)
foo car human = kinetic_energy m (speed car)
               where m = weight human * capacity car
источник

DP

Defragmented Panda in pro.algorithms
Defragmented Panda
обьект имеет десятки свойств. присать все - ужасно громоздко. выбирать нужные - все еще заваливает экран лишними деталями в тексте

пока лучшее что я видел это dynamic scope. идея концептуально противоположная высоким идеалам хаскеля

в джаваскрипте есть конструкция with

car.speed=4
car.capacity=6
human.space=1
human.weight=80

with(car) with (human){
speed*speed*weight*capacity/space/2
}

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

это кардинально сокращает обьем кода. но считается самым грязным трюком даже по меркам джаваскрипта. даже eval не отменяли а эта конструкция считается недопустимой в новых версиях ('use strict'), в модулях

ее проблемой считают затенение имен в случае совпадений имен свойств обьектов. ну и проблемы присваивания (какому обьекту приписать новое свойство?)
в моих примерах нужно заменить 1 слово чтобы заменить тот обьект что считаем (машина или трактор)

в твоем примере все еще нужно будет менять около 5 слов. и эти слова разбросаны по всей функции, что сильно повышает шанс ошибок типа тут заменил, а тут нет

@drMagras
источник