Я увидел фрагмент кода в книге, который выглядит следующим образом:
x = 10;
if(x ==10) { // start new scope
int y = 20; // known only to this block
x = y * 2;
}
Являются ли и область действия, и блок одинаковыми?
Я увидел фрагмент кода в книге, который выглядит следующим образом:
x = 10;
if(x ==10) { // start new scope
int y = 20; // known only to this block
x = y * 2;
}
Являются ли и область действия, и блок одинаковыми?
область, где вы можете ссылаться на переменную.
блок определяет block scope
переменная, определенная внутри блока, будет определена только внутри этого блока, и вы не сможете ссылаться на нее после окончания блока.
поэтому в этом коде, если вы попробуете что-то вроде:
x = 10;
if(x ==10) { // start new scope
int y = 20; // known only to this block
x = y * 2;
}
y = 5; // error y is out of scope, not it is not defined
потому что то, что у вас здесь, является локальной областью
другие виды области видимости в java - это class scope
(например), член класса имеет класс, поэтому он доступен в любом месте внутри класса.
основными правилами для области являются:
Блок представляет собой последовательность операторов, локальных деклараций классов и локальные инструкции объявления переменных в фигурных скобках.
6.3. Сфера применения Декларации
Объем декларации - это область программы, в рамках которой субъект, объявленный декларацией, может быть отнесен к использованию простое имя, если оно видно (§6.4.1).
В блоке вы можете объявлять переменные. Область определяет область, в которой вы можете получить доступ к объявленной переменной по ее простому имени.
когда дело доходит до условий и циклов, если вы не укажете {}, то непосредственный следующий оператор - это единственный оператор, который будет принадлежать определенному условию или циклу
например.
x = 10;
if(x ==10)
{
int y = 20;
x = y * 2;
}
both lines get executes only if condition returns TRUE
x = 10;
if(x ==10)
int y = 20;
x = y * 2; // this is not belong to if condition. therefore it will execute anyway
Они в основном одинаковы.
Блок - это некоторый код, окруженный {и}. Область - это часть программы, в которой видна определенная вещь. Насколько я знаю, все блоки создают области - все, что определено в блоке, не видно за пределами блока. Обратное неверно.
Вот несколько областей без блоков:
for(int k = 0; k < 10; k++) { // k<10 and k++ are in a scope that includes k, but not in a block.
System.out.println(k); // this is in a block (the {})
}
for(int k = 0; k < 10; k++) // k<10 and k++ are in a scope that includes k, as above
System.out.println(k); // but there no block!
class Test {
// this is a scope but not a block. Not entirely sure about this one.
int x = 2;
int y = x + 1; // I can access x here, but not outside the class, so the class must be a scope.
}
Согласно определению Block
Блок представляет собой группу из нуля или более операторов между сбалансированными фигурными скобками и может использоваться везде, где допускается одно утверждение.
So
{ //block started
} //block ended
Что бы ни объявляли переменные внутри блока, область, ограниченная этим блоком.
Это смысл?
Документы oracle определяют блок как
Блок представляет собой группу из нуля или более операторов между сбалансированными фигурными скобками и может использоваться везде, где разрешен один оператор
@Mhd.Tahawi уже рассказал, что такое область действия.
Одна вещь, которую я должен указать,
switch(something){
case somethin1:
line1
line2
break;
case someting2:
line3
line4
break;
}
line {1,2,3,4} находятся в той же области действия, что и блок, потому что я не начинал и не заканчивал каждый случай фигурными скобками. В отличие от python, отступ не подразумевает блок
Scope
относится к visibility of variables
. Другими словами, какие части вашей программы могут видеть или использовать ее. Обычно каждая переменная имеет глобальную область видимости. После определения каждая часть вашей программы может получить доступ к переменной.
Очень полезно иметь возможность ограничить область переменных одним function/block
. Переменная будет иметь ограниченную область действия. Таким образом, изменения внутри function/block
не могут повлиять на основную программу неожиданными способами.
Для языков программирования в целом область действия блока (также называемая областью действия блока) является всего лишь одним видом области действия; смотрите https://en.wikipedia.org/wiki/Scope_(computer_science)#Levels_of_scope.
Некоторые языки, такие как Python, не имеют ни блоков, ни областей видимости (но вместо этого имеют области функций, глобальные области и т.д.).