Что нового

Уплотнение кода

saraconor

Новичок
Сообщения
404
Репутация
3
в VBA есть возможность в одной строке одновременно делать условия, назначать переменные, циклы, и множество других функций при стандартном синтаксисе недопустимых, разделяются они следующим символом ":"
Приведу пример
Код:
If CommandButton2.Caption = "активация" Then CommandButton2.BackColor = RGB(255, 41, 41): CommandButton2.Caption = RGB(212, 0, 0): CommandButton2.Caption = "запуск": CommandButton2.ForeColor = RGB(255, 255, 255): GoTo EX

При стандартном синтаксисе все это должно выглядеть так
Код:
If CommandButton2.Caption = "активация" Then
CommandButton2.BackColor = RGB(255, 41, 41)
CommandButton2.Caption = RGB(212, 0, 0)
CommandButton2.Caption = "запуск"
CommandButton2.ForeColor = RGB(255, 255, 255)
GoTo EX
endif

Как в autoit устроить подобное?
К примеру такой код
Код:
run ( "explorer " & "C:\Users\des2\Desktop\папка")
WinWaitActive("папка")
 WinMove("папка",'',0,301,161,274)

как его написать в 1 строку?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Ни как, откройте секрет, для чего это может понадобиться? Вы же сами со временем перестанете понимать, что там написано и будете восстанавливать исходный код в читаемый вид.
 
Автор
S

saraconor

Новичок
Сообщения
404
Репутация
3
Afonichev сказал(а):
Ни как, откройте секрет, для чего это может понадобиться? Вы же сами со временем перестанете понимать, что там написано и будете восстанавливать исходный код в читаемый вид.
Так удобнее работать с большими объемами кода, если взять аналогию то это как строить дом из готовых бетонных блоков вместо того чтобы собирать его по кирпичику.
Меньше приходится скролить, путаницы наоборот не возникает, в одной строке можно поместить почти все действия выполняемые в данный момент.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
saraconor сказал(а):
Afonichev сказал(а):
Ни как, откройте секрет, для чего это может понадобиться? Вы же сами со временем перестанете понимать, что там написано и будете восстанавливать исходный код в читаемый вид.
Так удобнее работать с большими объемами кода, если взять аналогию то это как строить дом из готовых бетонных блоков вместо того чтобы собирать его по кирпичику.
Меньше приходится скролить, путаницы наоборот не возникает, в одной строке можно поместить почти все действия выполняемые в данный момент.

Попробуйте части кода выносить в отдельные *.au3 файлы, жизнь упрощает, проверено.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
saraconor [?]
как его написать в 1 строку?
Можно использовать синтаксис описания переменных
Код:
Global $1 = Run( "explorer " & "C:\Windows\System32"), $2 = WinWaitActive("System32"), $3 = WinMove("System32", "", 100, 100)


Если рассматривать AutoIt в терминах строительства, то построчно - это и есть "по кирпичикам". А если нужны "бетонные блоки", то оформите код в виде функций
Код:
RunSystem32()
RunTempDir()

; ----------------

Func RunSystem32()
  Run("explorer " & "C:\Windows\System32")
  WinWaitActive("System32", "", 3)
  WinMove("System32", "", 100, 100)
EndFunc

Func RunTempDir()
  Run("explorer " & @TempDir)
  WinWaitActive("Temp", "", 3)
  WinMove("Temp", "", 200, 200)
EndFunc


Кстати, кирпичный дом лучше панельного ;)
 
Автор
S

saraconor

Новичок
Сообщения
404
Репутация
3
Afonichev сказал(а):
Попробуйте части кода выносить в отдельные *.au3 файлы, жизнь упрощает, проверено.
Не достаточно гибкий инструмент, чтобы поправить код надо лезть в нужный .au3, а тут все на экране уже. И потом в этом .au3 опять-же придется всю простыню кода расписывать, смысл?


Добавлено:
Сообщение автоматически объединено:

InnI сказал(а):
saraconor [?]
как его написать в 1 строку?
Можно использовать синтаксис описания переменных
Код:
Global $1 = Run( "explorer " & "C:\Windows\System32"), $2 = WinWaitActive("System32"), $3 = WinMove("System32", "", 100, 100)


Если рассматривать AutoIt в терминах строительства, то построчно - это и есть "по кирпичикам". А если нужны "бетонные блоки", то оформите код в виде функций
Код:
RunSystem32()
RunTempDir()

; ----------------

Func RunSystem32()
  Run("explorer " & "C:\Windows\System32")
  WinWaitActive("System32", "", 3)
  WinMove("System32", "", 100, 100)
EndFunc

Func RunTempDir()
  Run("explorer " & @TempDir)
  WinWaitActive("Temp", "", 3)
  WinMove("Temp", "", 200, 200)
EndFunc


Кстати, кирпичный дом лучше панельного ;)

С функциями я тоже работаю, это не совсем то что нужно. А вот за синтаксис описания переменных спасибо большое, это именно то что нужно!
А почему после работы скрипт не завершается?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Вам видней..

Я очень сомневаюсь, что вы сделаете нужные правки в 5к строк кода написанном в одну строку быстрее, чем откроете нужный файл, перейдёте к нужной функции и поправите, что нужно.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
saraconor [?]
Не достаточно гибкий инструмент
Это вы рассуждаете с "крыши своей избушки" - малого опыта. Когда "построите несколько многоэтажек", т.е. дойдёте до повторного использования кода, тогда поймёте. А пока вас убеждать бесполезно - по себе знаю :smile:
 
Автор
S

saraconor

Новичок
Сообщения
404
Репутация
3
InnI сказал(а):
saraconor [?]
Не достаточно гибкий инструмент
Это вы рассуждаете с "крыши своей избушки" - малого опыта. Когда "построите несколько многоэтажек", т.е. дойдёте до повторного использования кода, тогда поймёте. А пока вас убеждать бесполезно - по себе знаю :smile:
В моем случае речь идет не о многоэтажках а о куче сарайчиков) не нужно для каждого ведь делать .au3, речь не о громадных функциях а о обычном уплотнении кода.
 

hedji

Продвинутый
Сообщения
409
Репутация
94
OffTopic:

Для любителей вырвиглазных однострочников есть отдельный котел в аду. :evil:
 

Webarion

Осваивающий
Сообщения
143
Репутация
24
Считаю, что иногда всё же удобно иметь одну строку:

Код:
;Пример1
If @error Then MsgBox(4096, "", "Ошибка"): Exit
;---------
If @error Then
	MsgBox(4096, "", "Ошибка")
	Exit
EndIf

;Пример2
If $var1 Then $var2=1 Else $var2=2
;---------
$var2=2
If $var1 Then $var2=1
;---------
If $var1 Then
	$var2=1
Else
	$var2=2
EndIf


Привычка из старого доброго ZX :smile:
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Vanguger [?]
иногда всё же удобно иметь одну строку
И синтаксис это позволяет ;)
Код:
;Пример1
If @error Then Exit MsgBox(4096, "", "Ошибка")

;Пример2
$var2 = ($var1) ? 1 : 2
 

Webarion

Осваивающий
Сообщения
143
Репутация
24
О, круто! :scratch: InnI где же ты раньше был, или я :smile: Вот не знал, что тут можно короткие условия применять, надо протестировать.
Вот бы ещё где-то почитать про разные подобные фишки. Что-то в документации не увидел.
 
Верх