Jump to content

Function within a func ?


Recommended Posts

Ok im probably guessing this will be a no but ill ask anyway

I have 4 small functions that are all for one task which is checking windows updates

These are the functions

Func _CollectPatches()
    Local $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    #forceref $oMYError
    Local $objSearcher = _CreateSearcher(_CreateMSUpdateSession())
    $colNeeded = _GetNeededUpdates($objSearcher)
    $objSearcher = 0
    Return $colNeeded
EndFunc   ;==>_CollectPatches

Func _CreateSearcher($objSession)
    If Not IsObj($objSession) Then Return -1
    Return $objSession.CreateUpdateSearcher
EndFunc   ;==>_CreateSearcher

Func _CreateMSUpdateSession($strHost = @ComputerName)
    Local $objSession = ObjCreate("Microsoft.Update.Session", $strHost)
    If Not IsObj($objSession) Then Return 0
    Return $objSession
EndFunc   ;==>_CreateMSUpdateSession

Func _GetNeededUpdates($objSearcher)
    SplashTextOn("Please Wait", "Checking For Updates", 220, 40, -1, -1, 18, "Tahoma", 11)
    If Not IsObj($objSearcher) Then Return -5
    $colNeeded = $objSearcher.Search("IsInstalled=0 and Type='Software'")
    SplashOff()
    Sleep(800)
    Return $colNeeded
EndFunc   ;==>_GetNeededUpdates

It would be great if i could include the secondary functions in a sub func so that they are contained within the main function

This is just an example to give you the idea of what i mean

Func _CollectPatches()
    Local $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    #forceref $oMYError
    Local $objSearcher = _CreateSearcher(_CreateMSUpdateSession())
        Func _CreateSearcher($objSession)
            If Not IsObj($objSession) Then Return -1
            Return $objSession.CreateUpdateSearcher
        EndFunc   ;==>_CreateSearcher
        Func _CreateMSUpdateSession($strHost = @ComputerName)
            Local $objSession = ObjCreate("Microsoft.Update.Session", $strHost)
            If Not IsObj($objSession) Then Return 0
        Return $objSession
EndFunc   ;==>_CreateMSUpdateSession
    $colNeeded = _GetNeededUpdates($objSearcher)
    $objSearcher = 0
        Func _GetNeededUpdates($objSearcher)
            SplashTextOn("Please Wait", "Checking For Updates", 220, 40, -1, -1, 18, "Tahoma", 11)
            If Not IsObj($objSearcher) Then Return -5
            $colNeeded = $objSearcher.Search("IsInstalled=0 and Type='Software'")
            SplashOff()
            Sleep(800)
            Return $colNeeded
        EndFunc   ;==>_GetNeededUpdates
    Return $colNeeded
EndFunc   ;==>_CollectPatches

Its just a question does this exist in coding in general and hopefully AutoIT

Link to comment
Share on other sites

Functions can not be inside another function, you can call the other functions from inside the first, but you can't contain them in it. It wouldn't make sense to put it inside, because a function is ignored by a script until you call it. So putting it inside one doesn't make it run it.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

Nested functions, nice idea Chimaera, but currently not possible in AutoIt v3.3.8.1 or the beta versions.

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

Its more for completness as i have to remember what all of them do, if they had been inside its easy to see needed parts of the main function.

Like i say it was just a thought

Presumably we would need a SubFunc key for it

Edited by Chimaera
Link to comment
Share on other sites

This is not possible at the moment :whisper:

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

@Chimaera - I'm not sure why the other MVP's here aren't pulling you up on this, but the Chat section is not to be used for talking code. You should be posting this and some of your other questions in General Help or Examples if relevant.

If you look at the top of the Chat Forum, it clearly states this is for Non-AutoIt chats.

This is where us programmers come to get away from programming.

If we let you get away with it, then we have to let all the others, and then this section is no longer a recluse.

Make sure brain is in gear before opening mouth!
Remember, what is not said, can be just as important as what is said.

Spoiler

What is the Secret Key? Life is like a Donut

If I put effort into communication, I expect you to read properly & fully, or just not comment.
Ignoring those who try to divert conversation with irrelevancies.
If I'm intent on insulting you or being rude, I will be obvious, not ambiguous about it.
I'm only big and bad, to those who have an over-active imagination.

I may have the Artistic Liesense ;) to disagree with you. TheSaint's Toolbox (be advised many downloads are not working due to ISP screwup with my storage)

userbar.png

Link to comment
Share on other sites

  • Moderators

Chimaera,

TheSaint has a point - please post in the correct section in future. ;)

M23

Edited by Melba23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

...i have to remember what all of them do...

This is where comments come in very handy. Describe what each function does when you call it from within your main function. This stops you forgetting what things do. If necessary make a comment about the type of return value, or the method used to return the data. Name your functions in a clear and unambiguous way. Stick to plain English.

Edited by czardas
Link to comment
Share on other sites

  • Moderators

FireFox,

I don't see the purpose of nested functions yet in AutoIt

From the little I have seen, it appeared that the internal functions could use Local variables from the external function directly - which would reduce the need for passing parameters. That would be a huge benefit in my opinion. ;)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

From the little I have seen, it appeared that the internal functions could use Local variables from the external function directly - which would reduce the need for passing parameters. That would be a huge benefit in my opinion. ;)

oh I did not notice that. You have a point too :P

Edit: Something like this I suppose :

Func _Main()
   Local $sString = "toto"

   _Nested() ;would output "toto"

   Func _Nested()
      ConsoleWrite($sString & @CrLf)
   EndFunc
EndFunc
Edited by FireFox
Link to comment
Share on other sites

Ok Melba and Saint

Its not actually code though as it doesn't exist in autoit so its just chat about theory :)

Just kidding...

@czardas i do comment m8, it was just something that occured to me.

Edited by Chimaera
Link to comment
Share on other sites

If simply for organization, you could just put all the related functions in a region:

#region Windows Updates
Func _CollectPatches()
    Local $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    #forceref $oMYError
    Local $objSearcher = _CreateSearcher(_CreateMSUpdateSession())
    $colNeeded = _GetNeededUpdates($objSearcher)
    $objSearcher = 0
    Return $colNeeded
EndFunc   ;==>_CollectPatches

Func _CreateSearcher($objSession)
    If Not IsObj($objSession) Then Return -1
    Return $objSession.CreateUpdateSearcher
EndFunc   ;==>_CreateSearcher

Func _CreateMSUpdateSession($strHost = @ComputerName)
    Local $objSession = ObjCreate("Microsoft.Update.Session", $strHost)
    If Not IsObj($objSession) Then Return 0
    Return $objSession
EndFunc   ;==>_CreateMSUpdateSession

Func _GetNeededUpdates($objSearcher)
    SplashTextOn("Please Wait", "Checking For Updates", 220, 40, -1, -1, 18, "Tahoma", 11)
    If Not IsObj($objSearcher) Then Return -5
    $colNeeded = $objSearcher.Search("IsInstalled=0 and Type='Software'")
    SplashOff()
    Sleep(800)
    Return $colNeeded
EndFunc   ;==>_GetNeededUpdates
#endregion Windows Updates
Link to comment
Share on other sites

Thank goodness for SciTE Jump recognising regions.

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

These kind of functions were added to AutoIt while I was developer (and more). The concept is there and implementation only needs few tweaks. They are beautiful features that you probably wouldn't ever see as part of AutoIt because that's what happens when language developer doesn't use the language he's developing.

♡♡♡

.

eMyvnE

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...