Экономия на объявлении переменных может привести к нежелательным последствиям.
В частности, так происходит при передаче в качестве параметров функции нескольких читаемых из потока данных.
Пусть мы хотим загрузить данные из файла и передать их в функцию.
При этом мы можем написать так:
myFunc(ReadInt(file),ReadFloat(file),ReadFloat(file))
Тем самым, мы передаём в нашу функцию нужные параметры, и вроде как экономим на создании 3х переменных.
НО!
Параметры в функции подставляются справа-налево! Вот здесь и выходит боком экономия.
Ниже приведён небольшой пример, подтверждающий возникновение нежелательного результата.
Strict
'имитируем загрузку из файла:
' сами предварительно записываем данные в поток
' а затем считываем эти данные
'открываем поток с привязкой к банку памяти
Local stream:TStream = OpenStream(New TBank)
'записываем данные
WriteLine(stream, "param 1")
WriteLine(stream, "param 2")
WriteLine(stream, "param 3")
'ставим позицию в начало, т.к. будем читать данные из потока
SeekStream(stream, 0)
'читаем и печатаем данные
fnPrintParams(ReadLine(stream), ReadLine(stream), ReadLine(stream))
'закрываем поток
CloseStream(stream)
'говорим что тут конец программы
End
'функция для печати полученных параметров
Function fnPrintParams(param1:String, param2:String, param3:String)
Print param1
Print param2
Print param3
End Function
Выполнив его, мы видим, что напечатались данные в обратном порядке:
param 3
param 2
param 1
Для предотвращения подобных неувязок можно:
1. ввести дополнительные переменные, читать данные в них, а потом передавать в функцию:
Local p1 = ReadInt(file)
Local p2# = ReadFloat(file)
Local p3# = ReadFloat(file)
myFunc(p1,p2,p3)
2. параметры функции записать в обратном порядке без изменения тела функции:
function myFunc(p3#,p2#,p1)