Shur писал(а):К слову.
И старайтесь не использовать Implicit Variables.
Kreator, если это сказано в общем, то это вредный совет. В Кларионе, где настройка программы происходит через написание имбедов, этот механизм весьма удобен.
Согласен, удобен, особенно когда привык. Я тоже всегда использовал. Но в последнее время стараюсь отказываться. Почему? Во-первых, всем известные проблемы (например, на этапе компилирования ошибок нет, действует только в рамках процедуры, что для программирующих в ABC неприемлемо ...). Во- вторых, сами программисты SV как правило не используют, приведу тест первого попавшего класса:
Код: Выделить всё
EnhancedFocusClassType.EnableControlType PROCEDURE(USHORT pControlType)
lIndex UNSIGNED,AUTO
CODE
LOOP lIndex = 1 TO RECORDS(SELF.ExcludedControlType)
GET(SELF.ExcludedControlType,lIndex)
IF SELF.ExcludedControlType.CT = pControlType THEN
DELETE(SELF.ExcludedControlType)
BREAK
END
END
EnhancedFocusClassType.ControlAllowed PROCEDURE(UNSIGNED pControl)
lControlType USHORT,AUTO
lIndex UNSIGNED,AUTO
CODE
IF NOT pControl THEN RETURN False.
IF pControl{PROP:InToolbar} THEN RETURN False.
IF NOT pControl{PROP:Visible} THEN RETURN False.
IF RECORDS(SELF.ExcludedControlType) = 0 THEN RETURN True.
lControlType = pControl{PROP:Type}
LOOP lIndex = 1 TO RECORDS(SELF.ExcludedControlType)
GET (SELF.ExcludedControlType,lIndex)
IF SELF.ExcludedControlType.CT = lControlType THEN RETURN False.
END
RETURN True
Казалось бы, циклы, для таких переменных самое то.
В-третьих, в хелпе есть предостережения насчёт таких переменных, например:
Код: Выделить всё
Implicit variables used only within the ROUTINE are less efficient than using local variables.