LINUX.ORG.RU

Нужен совет по придумыванию синтаксиса

 ,


0

4

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

ПЕРВЫЙ:

// циклы с предусловием:

while condition do
    statements
end:while

until condition do
    statements
end:until

// циклы с постусловием:

do
    statements
repeat while condition;

do
    statements
repeat until condition;

// вечный цикл:

do
    statements
repeat forever;

// простой блок кода:

block
    statements
end:block

ВТОРОЙ:


// циклы с предусловием:

while condition loop
    statements
end:while

until condition loop
    statements
end:until

// циклы с постусловием:

loop
    statements
repeat while condition;

loop
    statements
repeat until condition;

// вечный цикл:

loop
    statements
repeat forever;

// простой блок кода:

do
    statements
end:do
★★

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

Мы читаем: int…

… боже, как тянется время …

something… и всё ещё не знаем, что это такое.

… проходит целая вечность …

И вот наконец, ура! Нам встретилась открывающая круглая скобочка!

Так, а где это я? Ах да, я читаю что-то. Но что? Вспомнил, код на мерзкой сишечке!

Теперь мы знаем, что это функция, а не переменная.

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

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

def func1():
    a = 5
    if True:
        a = 9
    print(a)

func1()

Тут у нас две переменные «a» или одна, значение которой меняем? Какое число выведется? Это важно знать, особенно, если функция большая и две «a» разнесены далеко.

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

Концептуально это просто.

А реальном коде, где из конца функции вверху не видно её середины, это может создавать проблему.

Но это не только к Питону относится, а ко всем якобы «простым» языкам, которые «упрощают» написание кода и «снижают» порог вхождения.

Ну и в целом – проблема вида «опечатался с именем переменной, а транслятору плевать» – общая проблема большинства динамических ЯП с «простым» синтаксисом.

На «простоту» синтаксиса есть плата, о которой на входе не предупреждают.

wandrien ★★
() автор топика
Последнее исправление: wandrien (всего исправлений: 3)
Ответ на: комментарий от LongLiveUbuntu

плюс компилятор писать проще.

Оба варианта же одинаковые структурно, разница в выборе ключевых слов.

Если честно, мне оба не нравятся. Именно в той части, где циклы с пост-условием.

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

Возьми лучше пример с лиспа, а не бейсиков/паскалей и т.д.

// циклы с предусловием:

loop
    while condition;
    statements...
end:loop;

loop
    until condition;
    statements...
end:loop;

// циклы с постусловием:

loop
    statements...
    while condition;
end:loop;

loop
    statements...
    until condition;
end:loop;

// вечный цикл:

loop
    statements...
end:loop;

// простой блок кода:

block
    statements...
end:block;

Само собой while и until можно как ключевые слова использовать и посреди statements…

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

Само собой while и until можно как ключевые слова использовать и посреди statements…

while и until - одно и то же, только с инвертированным условием. если в языке есть ‘not’ conditon, то смысла иметь два слова - нет.

если можно использовать посреди statements… то вопрос - сколько while/until может быть внутри одного loop? но если их может быть много то исчезает смысл этих while/until, как постусловия/предусловия, и все переходит в loop с простыми break, по условию в произвольном месте в произвольном количестве.

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

В принципе, да. Можно оставить только loop, end:loop, и break.

while и until - одно и то же, только с инвертированным условием. если в языке есть ‘not’ conditon, то смысла иметь два слова - нет.

Так это и к вариантам ТСа относится.

Gentooshnik ★★★★★
()
-- precondition loops:

while <condition> do
	<statement>;
	...
done:while;

until <condition> do
	<statement>;
	...
done:until;



-- postcondition loops:

repeat
	<statement>;
	...
loop:while condition;

repeat
	<statement>;
	...
loop:until condition;



-- infinite loop:

repeat
	<statement>;
	...
loop:forever;



-- code block:

do
	<statement>;
	...
done;



-- bonus:

repeat
	<statement>;
	...
loop:never;

Если извращение с loop:never не нужно, то для бесконечного цикла достаточно

repeat
	<statement>;
	...
loop;
korvin_ ★★★★★
()
Последнее исправление: korvin_ (всего исправлений: 2)

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

Причем чем проще идеи и чем всеохватнее выходит результат, тем прикольнее!

AntonI ★★★★★
()

в рамках бреда

  1. области видимост ограничены фигурным скобками
  2. области видимости не возвращают значение
  3. области видимости работают как «почти замыкания»: а. они могут быть именованы или быть анонимными б. их можно переиспользовать в рамках родительской области видимости
  4. неименованные области видимости немедленно выволняются
  5. именованные области видимости выполняются после ключевого слова call
  6. из области видимости можно выйти по ключевому слову leave
function foo() {
{
  // anonymous scope
  print("hello anonymous")
}
let foo = "foo"

parent = {
  let bar = "bar"
  child = {
    print("hello from child")
    print(foo)
    print(bar)
    leave parent
}
   call child
   bar = "bar1"
   call child
}

call parent
foo = "foo1"
call parent
}

FishHook
()
int sum(a: int, b: int) {
  a + b //  всегда возвращает результат последнего выражения, return опицонален
}

// вечный цикл
for {
  // ...
}

// цикл со счетчиком
for int i = 0; i < 10; i++ {
  //
}

// альтернатива while
for i-- {
  //
}

// foreach
for var a in b {
  //
}
rtxtxtrx ★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)