Sign in to follow this  
Followers 0
czardas

UDF header syntax - Resolved

10 posts in this topic

#1 ·  Posted (edited)

I may need to write a second function to call _MyConversionFunc since it is used differently internally. The only difference is that error checks, and variable declarations, are sometimes ignored to increase speed by avoiding duplicated arguments.

; Syntax.........: _MyConversionFunc($vRet [, $aKey = Default [, $bTest = True ]])
; Parameters ....: $vRet  - The number to convert
;                ; $aKey  - Conversion key ... Internal use only
;                ; $bTest - Error checking ... Internal use only

Writing a second function to call the first function with default parameters set seems a bit crazy to me, but if I don't do that I'm not sure how I should describe the syntax? The user only needs to see the following info.

; Syntax.........: _MyConversionFunc($vRet)
Edited by czardas

Share this post


Link to post
Share on other sites



Have a browse through the Wiki entry which Mat has been updating over the last couple of days >> http://www.autoitscript.com/wiki/UDF-spec

About internal functions, you don't have to document what the return codes are etc... as the user shouldn't be accessing these.


_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_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: 04/09/2015

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

It's an excellent article, but I couldn't find any mention of combining internal use only parameters. It's not the return values that concern me. For example the error checks are only performed on the first run when used internally. If the user calls the function, the error checks are performed always. The function is used differently internally than by the user.

Writing a separate function for the user because the header syntax doesn't cater for internal use only parameters just seems like a waste of bytes.

Func _MyUserFunc($vRet)
    Return _MyConversionFunc($vRet)
EndFunc
Edited by czardas

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

Good thinking, but it isn't going to work, since sometimes the default values are altered internally and I have no way of knowing whether the function was called by another internal function, or by the user. Also the idea of adding more error checks to see if errors need checking is making my brain ache. :D

Maybe I should just leave the header syntax the way it is in the first post, and if the user doesn't read the parameter description: too bad! Although it's not entirely correct.

If the user alters the default values when advised not to do so, I'm not responsible. :oops:

Edited by czardas

Share this post


Link to post
Share on other sites

#6 ·  Posted (edited)

It is sometimes the case that I make a U-turn and backtrack on a decision. Since they are not optional, I think that internal use only parameters should be excluded from the Syntax section of the header, so the second example in my first post would appear to be more correct. Information about the excluded parameters can be added to the Remarks section. Voila!

Thanks for the responces.

Edited by czardas

Share this post


Link to post
Share on other sites

The correct way is a new function. When writing a UDF (or for that matter, any code that's going to be read by the community), code correctness is much more important than speed or size. It's not a huge loss: the public function calls the internal function with default parameters.

Share this post


Link to post
Share on other sites

#8 ·  Posted (edited)

Thanks Mat. I knew that nudge would get you on the case. :D

I'll do exactly what you say for a public release, and have a streamlined version for my own purposes. Like you said, someone might include a second or third parameter by accident, making his or her script unstable. Thanks for looking into it.

Edited by czardas

Share this post


Link to post
Share on other sites

I'll do exactly what you say for a public release, and have a streamlined version for my own purposes. Like you said, someone might include a second or third parameter by accident, making his or her script unstable.

If someone is using your function incorrectly, that's their issue, and not something you can prevent. If they send your function too many parameters, they're going to get an error from AutoIt saying "<function name> called with wrong number of args."


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

Share this post


Link to post
Share on other sites

I agree with you BrewManNH. Reducing the number of possible errors by considering as many scenarios as possible is the reasoning behind my recent questions. There are many experienced programmers here and your recent responces have made these questions worth while. Hopefully they will have significance to others too.

Thanks

Share this post


Link to post
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
Sign in to follow this  
Followers 0