Jump to content

Recommended Posts

Posted

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

Posted

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!

  Reveal hidden contents

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

Posted

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

UDF List:

  Reveal hidden contents

Updated: 22/04/2018

Posted (edited)

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
Posted (edited)

  Quote

Function within a func ?

INCEPTION.

You can do it in javascript and in some other languages.

Edited by FireFox
Posted

This is not possible at the moment :whisper:

My UDFs and Tutorials:

  Reveal hidden contents

 

Posted

@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.

  Reveal hidden contents

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

  • Moderators
Posted (edited)

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:

  Reveal hidden contents

 

Posted (edited)

  On 3/20/2013 at 12:55 PM, 'Chimaera said:

...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
  • Moderators
Posted

FireFox,

  Quote

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:

  Reveal hidden contents

 

Posted (edited)

  On 3/20/2013 at 3:09 PM, 'Melba23 said:

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
Posted (edited)

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
Posted

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
Posted

Thank goodness for SciTE Jump recognising regions.

UDF List:

  Reveal hidden contents

Updated: 22/04/2018

Posted

  On 3/21/2013 at 12:25 AM, 'guinness said:

Thank goodness for SciTE Jump recognising regions.

It's one of the reasons why I use regions :)
Posted

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

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
  • Recently Browsing   0 members

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