It
There are two contexts in which it
has a meaning:
<expression> whose (it)
(it) of <expression>
An example of the second context is this expression, which lists the names and file sizes of a specified folder:
- Q: (name of it, size of it) of files of folder "c:"
- A: AUTOEXEC.BAT, 0
- A: blacklist.txt, 42
- A: boot.ini, 209
- A: CONFIG.SYS, 0
- A: whitelist.txt, 213
Here, it
refers to files of folder "c:"
.
The whose
clause lets you filter a list based on the evaluation of an it
expression. This is one of the most important targets of the it
keyword:
- Q: exist files whose (name of it starts with "b") of folder "c:"
- A: True
- Q: number of (files whose (name of it starts with "b") of folder "c:")
- A: 2
In these expressions, it
still refers to files of folder "c:"
.
You must be careful about the placement of parentheses, which can change the
target of the it
keyword. In the following expression, it
refers to files
:
- Q: (files of folder "c:") whose (name of it contains "a")
- A: "atl70.dll" "7.0.9466.0" "ATL Module for Windows (Unicode)" "7.00.9466.0" "Microsoft Corporation"
- A: "blacklist.txt" "" "" "" ""
Note that this is not the same as the following expressions, which both have the wrong placement of parentheses:
- Q: files of folder "c:" whose (name of it contains "a")
- E: Singular expression refers to nonexistent object.
- Q: files of (folder "c:" whose (name of it contains "a"))
- E: Singular expression refers to nonexistent object.
These are two equivalent (and wrong) statements where the it
refers to the
closest object, which is the folder, not the files.
There can be more than one it
in an expression. The rule is that each one
refers to the object listed to the left of the associated whose
. For
example:
- Q: preceding texts whose (it contains "n") of characters whose (it is "a") of "banana"
- A: ban
- A: banan
Here the expression returns the substrings preceding 'a' that contain 'n'. The
first it
refers to the substrings; the second refers to the characters. This
simple and intuitive rule makes it easy to develop complex expressions. Here's
another example:
- Q: (characters of "banana") whose (exists character whose (it is "n") of preceding text of it)
- A: a
- A: n
- A: a
This expression illustrates two nested whose-it clauses. The inner one finds leading substrings that contain an 'n'. The outer one returns the characters following those substrings.
Because it
represents a value, you can operate on it like any other variable:
- Q: (it * it) of (1;2;3;4)
- A: 1
- A: 4
- A: 9
- A: 16
You can nest these references:
- Q: (it * it) whose (it > 8) of (1;2;3;4)
- A: 9
- A: 16
Here, the first instances of it
are multiplied and passed on to the third
instance of it
for comparison.
The it
keyword never stands for an expression, but rather for a single value.
Often it stands, in turn, for the serial values of a plural expression. But it
can only stand for one value at a time.
Watch the video about the It-without-Whose construct to have more information about this clause.