Слово «но» в программировании - PullRequest
3 голосов
/ 06 января 2012

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

например в псевдокоде

 I like Apples, but I like Washington apples more

Ответы [ 6 ]

3 голосов
/ 06 января 2012

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

Программирование на императивном языке, как и большинство, выполняется в терминах императивных команд. «До Х». «Если X сделать Y». Наиболее близким к «но» может быть else или else if, то есть:

if (value == 1)
{
   #do something
}
else
{
   #do something else
}

Так что, если бы мы давали императив инструкциям нашему официанту, мы могли бы превратить нашу декларативную информацию о горохе раньше («я не люблю горох, но иногда буду есть их в салатах») в команду «официант , если у закуски есть горох в салате, тогда подают блюдо, иначе, если у входа только есть горох, тогда не подают блюдо ". В psuedocode, если наш официант (или компьютерный официант) понимает php5, это может выглядеть так:

if (entree->hasPeasInSalad())
{
    serve(entree);
}
else if (entree->isPeas())
{
    discard(entree);
}
3 голосов
/ 06 января 2012

Я не могу придумать ни одного контекста, в котором «но» означает что-то отличное от «и» (за исключением того факта, что это подразумевает чувство противоречия, но я не понимаю, как это перешло бы в код),так что просто используйте оператор "и" языка, то есть && для большинства языков.

2 голосов
/ 10 января 2012

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

Например (используяпример писателя предыдущего плаката)

I dislike peas but I'll sometimes eat them in salads

Вы можете несколько прочитать это как

I don't eat peas but I'll eat them in salads

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

if(hasPeas()) {
    if(inSalad()) {
        willEat();
    } else {
        willNotEat();
    }
}

Вы можете почти думать об этом как о состоянии охраны или пограничного случая.Например, при чтении файла (используя ДЕЙСТВИТЕЛЬНО плохой код для иллюстрации идеи):

text = "";
while(true) {
    while((count = canRead(fd)) <= 0) { // nothing to read
        if(count == EOF) { // EOF is a magic value meaning there will never be more to read
            return text;
        }
        wait(1000); // wait a bit to see if more text shows up to read
    }
    text += read(fd, count);
}
1 голос
/ 06 января 2012

У нас есть ключевое слово unless в Ruby, но я не могу себе представить, используя but.

0 голосов
/ 08 января 2012

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

var degreeOfLikeness = neutral;

if (object.type = Apple) {
    degreeOfLikeness = like_Degree_5;
    if (object.spicies = "Washington")
        degreeOfLikeness = like_Degree_8;
}

if (degreeOfLikeness > like_Degree_2) {
    object.eat();
    if (degreeOfLikeness > like_Degree_6) {
      output.say("Ummm!!!");
    }
}
0 голосов
/ 06 января 2012

Возможно как else?

"Если x меньше 5, сделайте это, но если x больше 5, сделайте это."

if (x < 5) {
   doThis();
}
else {
   doThat();
}

Или, может быть, как and с отрицанием?

"Если x от 3 до 8, но не равно 5, сделайте это."

if (x >= 3 && x <= 8 && x != 5) {
   doThis();
}
...