Он называется «троичным» или «условным» оператором.
Пример
Оператор?: Можно использовать как ярлык для оператора if ... else. Обычно он используется как часть более крупного выражения, где оператор if ... else будет неудобным. Например:
var now = new Date();
var greeting = "Good" + ((now.getHours() > 17) ? " evening." : " day.");
В примере создается строка, содержащая «Добрый вечер». если это после 6 вечера. Эквивалентный код с использованием оператора if ... else будет выглядеть следующим образом:
var now = new Date();
var greeting = "Good";
if (now.getHours() > 17)
greeting += " evening.";
else
greeting += " day.";
Из документации MSDN JS .
По сути это условное заявление.
Также см .:
Besides what Jeremy said, its main benefit is that it has its own bit of syntactic sugar: the enhanced for-loop. If you have, say, an Iterable
, you can do:
for (String str : myIterable) {
...
}
Nice and easy, isn't it? All the dirty work of creating the Iterator
, checking if it hasNext()
, and calling str = getNext()
is handled behind the scenes by the compiler.
And since most collections either implement Iterable
or have a view that returns one (such as Map
's keySet()
or values()
), this makes working with collections much easier.
The Iterable
Javadoc gives a full list of classes that implement Iterable
.
Если у вас есть сложный набор данных, например дерево или спиральная очередь (да, я только что придумал), но вам все равно, как он структурирован внутренне вы просто хотите получить все элементы один за другим, вы получите его для возврата итератора.
Рассматриваемый сложный объект, будь то дерево, очередь или WombleBasket, реализует Iterable и может возвращать объект-итератор, который вы можете запросить с помощью методов Iterator.
Таким образом, вы можете просто спросить его, если он hasNext ()
, и если это так, вы получите элемент next ()
, не беспокоясь о том, где его взять в дереве или где бы то ни было.
Он возвращает java.util.Iterator
. В основном он используется, чтобы иметь возможность использовать тип реализации в расширенном цикле for
List<Item> list = ...
for (Item i:list) {
// use i
}
. Под капотом компилятор вызывает list.iterator ()
и повторяет его, давая вам i
внутри цикла for.
An interface is at its heart a list of methods that a class should implement. The iterable interface is very simple -- there is only one method to implement: Iterator()
. When a class implements the Iterable
interface, it is telling other classes that you can get an Iterator
object to use to iterate over (i.e., traverse) the data in the object.
Iterators basically allow for iteration over any Collection.
It's also what is required to use Java's for-each control statement.