Подтвердить что ты не робот

Является ли оператор "if" рассмотренным методом?

Интересное обсуждение появилось среди моих сверстников относительно того, является ли выражение "если" рассмотренным методом? Хотя "if" добавляется с помощью оператора слова, он по-прежнему ведет себя аналогично простому методу невозвратных значений.

Например:

if(myValue) //myValue is the parameter passed in
{
    //Execute
}

Аналогичным образом метод может выполнять одну и ту же операцию:

public void MyMethod(myValue)
{
    switch(myValue)
    {
        case true:
            //Logic
            break;
        case false:
            //Logic
            break;
    }
}

Точно ли вызывать (рассматривать) инструкцию "if" простой предопределенный метод на языке программирования?

4b9b3361

Ответ 1

В таких языках, как C, С++, С#, Java, IF есть оператор, реализованный как зарезервированное слово, являющееся частью ядра языка. В языках программирования семейства LISP (схема приходит в голову) IF - это выражение (означающее, что оно возвращает значение) и реализуется как специальная форма. С другой стороны, в чистых объектно-ориентированных языках, таких как Smalltalk, IF действительно есть метод (точнее: сообщение), обычно реализуемый в классе Boolean или в одном из его подклассов.

Нижняя строка: истинная природа условной инструкции IF зависит от языка программирования и от парадигмы программирования этого языка.

Ответ 2

Нет, оператор "if" не похож на метод на С#. Рассмотрим способы, которыми он не похож на метод:

  • Объекты в содержащем блоке находятся в области тела "if" . Но метод не получает никакого доступа к среде привязки своего вызывающего.
  • Во многих языках методы являются членами чего-то - типа, возможно. Заявления не являются членами.
  • В языках с первоклассными методами методы могут передаваться как данные. (В С#, путем преобразования их в делегаты.) Операторы "if" не являются первоклассными.
  • и т.д. Различия несметны.

Теперь имеет смысл думать о некоторых вещах как о каком-то методе, а не о "if" . Многие операторы, например, очень похожи на методы. Там очень мало концептуальной разницы между:

decimal x = y + z;

и

decimal x = Add(y, z);

И на самом деле, если вы разбираете добавление двух десятичных знаков в С#, вы обнаружите, что сгенерированный код на самом деле является вызовом метода.

Некоторые операторы имеют необычные характеристики, которые затрудняют их характеризацию как методы:

bool x = Y() && Z();

отличается от

bool x = И (Y(), Z());

на языке, который стремится оценить аргументы метода; в первом случае Z() не оценивается, если Y() является ложным. Во втором, оба оцениваются.

Ваше создание метода "если" скорее задает вопрос; реализация сложнее, чем оператор "if" . Говорить, что вы можете эмулировать "если" с помощью переключателя, это сказать, что вы можете подражать велосипеду с мотоциклом; заменить что-то простое на нечто более сложное, не является убедительным. Было бы разумнее указать, что переключатель на самом деле является причудливым "если" .

Ответ 3

Вы не можете создать метод myIfStatement() и ожидать, что следующее будет работать:

...
myIfStatement(something == somethingElse)
{
   // execute if equal
}
else
{
   // execute if different
}

if является оператором управления и не может быть реплицирован методом, и вы не можете заменить вызов метода, если:

myVariable = if(something == somethingElse);

if не может быть перегружен.

Это несколько признаков того, что if не является методом, но есть и другие, которые я подозреваю.

Ответ 4

Зависит от языка точно, но в C, java, perl, no, это языковые команды. Зарезервированные слова. Если бы они были функциями, вы могли бы перегрузить их и получить указатели на них и сделать все, что вы можете делать с функциями.

Это скорее философский вопрос, чем вопрос программирования.

Ответ 5

У метода есть подпись, и его основным намерением является resuable логика, тогда как , если является просто условием, управляющим потоком выполнения. Если вы понимаете сборку, вы бы знали, что оба они отличаются даже на очень низком уровне.

Ответ 6

Конечно, вы можете писать методы If() и IfElse(), но это не делает их одинаковыми.

If() определяется как оператор на языке, на том же уровне, что и вызовы методов. Но есть различия в a.o. возможности синтаксиса и оптимизации.

Итак: Нет, оператор If() не является методом. Вы не можете, например, не назначать его делегату.

Ответ 7

Считая, что оператор if является методом, только делает его запутанным, на мой взгляд. Сходство с вызовом метода просто поверхностно.

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

Псевдокод:

load myValue, reg0
test reg0
jumpeq .skip
  ; code inside the if
.skip:

Если вы используете else, вы получите два перехода:

load myValue, reg0
test reg0
jumpeq .else
  ; code inside the if
  jmp .done
.else:
  ; code inside the else
.done:

Ответ 8

Является ли оператор "if" рассмотренным методом?

Нет, это не считается методом, как вы уже видели в других ответах. Однако, если у вас был вопрос: "Ведет ли он себя как метод?", Тогда ответ может быть да в зависимости от языка. Любой язык, поддерживающий первоклассные функции, может обойтись без встроенного конструктора/оператора типа if. Игнорируйте все пушистые вещи, такие как возвращаемые значения и синтаксис, поскольку в основном это просто функция, которая оценивает логическое значение и , если она true, затем она выполняет некоторый блок кода. Также игнорируйте OO и функциональные различия, потому что следующие примеры могут быть реализованы как метод класса Boolean на любом языке, который используется как Smalltalk.

Ruby поддерживает блоки исполняемого кода, которые могут быть сохранены в переменной и переданы методам. Итак, здесь реализована пользовательская функция _if_, реализованная в Ruby. Материал в { .. } представляет собой часть исполняемого кода, переданного функции. Он также известен как блок в Ruby.

def _if_ (condition)
  condition && yield
end

# simple statement
_if_ (42 > 0) { print "42 is indeed greater than 0" }

# complicated statement
_if_ (2 + 3 == 5) {
    _if_ (3 + 5 == 8) { puts "3 + 5 is 8" }
    _if_ (5 + 8 == 13) { puts "5 + 8 is 13" }
}

Мы можем сделать то же самое в C, С++, Objective-C, JavaScript, Python, LISP и многих других языках. Вот пример JavaScript.

function _if_(condition, code) {
    condition && code();
}

_if_(42 > 0, function() { console.log("Yes!"); });

Ответ 9

Если бы это было классифицировано как метод, то, безусловно, мы были бы в сфере OO, но мы этого не сделаем, поэтому я предполагаю, что мы о функции. Конечно, функция/подпрограмма может быть записана для репликации поведения if (я думаю, что это фактически функция в схеме lisp/.).

Я бы не классифицировал его как функцию или даже подпрограмму, а просто управлял потоком.

Ответ 10

Если по методу мы понимаем блок кода, который может быть вызван, и поток управления автоматически возвращается вызывающему, когда метод заканчивается, то if не являются методами. Поток управления не возвращается нигде после выполнения if.

Ответ 11

Оператор IF - это функция условного контура, используемая в большинстве lanuages, которая выполняет поток пути из оценки логического условия true или false. Помимо случая предикации ветвления, это всегда достигается путем выборочного изменения потока управления на основе некоторого условия.

Конструкция IF - это самая простая и необходимая логика, используемая при программировании. Он позволяет создавать строительные блоки для функций.

Ответ 12

Да, if - это функция на некоторых языках, хотя она редко и использование ограничено.

Обычно конструкция имеет нечто вроде if(booleanCondition, functionPointerToCallIfConditionTrue, functionPointerToCallIfCondtionFalse). Это может быть использовано как делегат для других функций, если вы хотите.

Mathematica, например, ведет себя таким образом, и даже С# может сделать это с небольшим количеством работы, если вы используете Linq-выражения; Взгляните на System.Linq.Expressions.Expression.IfThenElse.

Ответ 13

Нет. Вы не вернетесь назад, когда закончите с if. Это просто контрольное выражение.

Ответ 14

Обратите внимание, что в вашем примере вы заменили один "оператор выбора" (спецификация С# 4, раздел 8.7), оператор if (раздел 8.7.1) с другим, оператор switch (раздел 8.7.2). Вы также реорганизовали инструкцию выбора в отдельный метод. Однако вы не заменили использование инструкции выбора с помощью метода.

Ответ на ваш вопрос "нет".