I saw a piece of code in a book, which is as follows:
x = 10;
if(x ==10) { // start new scope
int y = 20; // known only to this block
x = y * 2;
}
They are mostly the same.
A block is some code surrounded by { and }. A scope is the part of the program where a certain thing is visible. As far as I know, all blocks create scopes - anything defined in a block isn't visible outside the block. The converse is not true.
Here are some scopes without blocks:
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's 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.
}
when it comes to conditions and loops if you don't specify {} then immediate following statement is the only statement that will belong to particular condition or loop
e.g.
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 programming languages in general, the scope of a block (also known as block scope) is just one kind of scope; see https://en.wikipedia.org/wiki/Scope_(computer_science)#Levels_of_scope.
Some languages, like Python, do not have blocks nor block scopes (but instead have function scopes, global scopes, etc.).