LINUX.ORG.RU
ФорумTalks

Все просто ))

 ,


0

1

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

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

// value can be: a,b,c,d,e,f or g
myLongLongNameOfVariable = getName();
if (myLongLongNameOfVariable == 'a' || myLongLongNameOfVariable == 'b' || myLongLongNameOfVariable == 'c' || myLongLongNameOfVariable == 'd' || myLongLongNameOfVariable == 'e' || myLongLongNameOfVariable == 'f') {
    forAllNonDefault();
    if (myLongLongNameOfVariable == 'a') {
        forA();
    } else if (myLongLongNameOfVariable == 'b') {
        forB();
    } else if (myLongLongNameOfVariable == 'c') {
        forC();
    } else if (myLongLongNameOfVariable == 'd') {
        forD();
    } else if (myLongLongNameOfVariable == 'e') {
        forE();
    } else if (myLongLongNameOfVariable == 'f') {
        forF();
    }
} else {
    // last (here 'g') value context (default)
    forDefault();
}

Ваши предложения?

Ответ на: комментарий от deep-purple

Да, если написать полностью, будет не так красиво.

(function (ftable,fname) {
  if(ftable.hasOwnProperty(fname)){
    forNonDefault();ftable[fname]()
  } else forDefault();
})({a:forA,b:forB,c:forC,d:forD,e:forE,f:forF},getName())

userd
()
Ответ на: комментарий от TheAnonymous
    case 'a':
    case 'b':
    case 'c':
    case 'd':
    case 'e':
    case 'f':

Можно не заморачиваться и использовать расширения GCC:

    case 'a'...'f':

i-rinat ★★★★★
()
Ответ на: комментарий от deep-purple

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

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

Это они звучат одинаково (сами по себе ноты, если сыграть до-диез и ре-бемоль - одно и то же). Но с точки зрения гармонии (теории) есть различия

TheAnonymous ★★★★★
()
Ответ на: комментарий от i-rinat

Есть тональности, которые конкретно обозначаются кол-вом диезов и бемолей: http://www.deinmusikhaus.de/images/2010_09_18_13-52-37-quitnenzirkel_b_600.jpg

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

Например на картинке есть B-dur в которой есть нотка си-бемоль, и есть H-dur в которой есть нотка ля-диез - однако, это одна и та же нота, клавиша, лад на гитаре и даже частота колебания.

deep-purple ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Я тож не музыкант, ну так, поигрываю дома на гитарке, просто листал «учебник гармонии для вузов» когда-то давно ))

Там есь и похлеще сокращения типа твоих «case 'a'...'f'»:

Гармония записывается вот таким сокращенным видом: I, II, V, VI. И, музыканту, увидевшему этот квадрат на листочке бумажки, достаточно только спросить - а в какой тональности то играем?

Если разобрать этот квадрат, это все без привязки к тональности:

I - первая ступень, мажорная, т.к. не указана маленькая «m», далее на основе этой первой ступени мы можем «идентифицировать» остальные ступени. II - вторая ступень, по умолчанию минорная (раз не указано иное). V - пятая ступень (доминанта), мажорная (раз не указано иное) IV - шестая ступень, минорная (раз не указано иное).

Тогда, если нам сказали - играем в до-мажоре, аккорды будут такие: C, Dm, G, Am, или для «вкуса и объема» можно накинуть минорных семерок: C, Dm7, G, Am7

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