Jump to content

BestCodingPractice Analyzer ;)


mLipok
 Share

Recommended Posts

  • Moderators

boththose,

 

what is the argument for declaring outside the loop, as opposed to assigning and iterating in the same location?

I remember it being explained in another thread a long time ago along these lines:

When you declare a variable AutoIt does some checking to see if the name has been used before and in what scope. So declaring it inside a loop just causes unnecessary overhead. Although this overhead is minimal in most cases, as demonstrated by jchd's timings above, why make the CPU work harder than it needs to?

Personally I do not agree with his view that declaring the variables inside loop is "pretty useful", but as we are a broad church here and it makes so little difference, I am certainly not going to enter into an argument - there are more important things in life. ;)

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

 if I am going to spend more than 60ns writing the extra line i shouldve just compiled.

I agree declaring variables inside the loop is not "pretty useful", declaring them wherever i want, and in their most narrow of scopes, is the "pretty useful" part

Edited by boththose

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to comment
Share on other sites

For arrays created in loops, re-declaration is pretty useful and (in my view) good practice as well.

 

If the array changes size or dimension, then I recognize redeclaration as being super-efficient. If, on the other hand, an array of exactly the same dimensions is to be reused; then I see no benefit - unless you specifically require empty array elements to be used for some specific purpose. I think this is more an exception to the rule and quite unlikely to be the only solution.

Although keeping variable declarations close to their use within the code may seemingly aid readability, I think it can also add complication. Redeclaration (within a loop) hinders the flow of arguments, and. In this sense I see it as being illogical, which in turn makes the code harder to understand (to some degree :think:).

Edited by czardas
Link to comment
Share on other sites

You seem to belittle the fact that a declaration in AutoIt is an initialization as well.

This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Link to comment
Share on other sites

Well I'm speaking generally, and I'm always happy to reconsider my opinion. In terms of freeing up memory, I have to agree with you that it has certain benefits for larger arrays. I tend to be lazy and overwrite elements rather than reinitialize the whole array. In some instances this is indeed questionable.

Edited by czardas
Link to comment
Share on other sites

If you don't blank out the original contents of the array, how do you keep track of what's new and what's old? It's like declaring a variable in C++ but not initializing the value, you'll never know what the variable is going to hold until it's initialized with a value you set.

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

Exactly what BrewManNH said. Not all variables used inside loops are running accumulators.

What I say is that applying blindly strict directives without taking the context in consideration isn't the best practice to coding in general.

This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Link to comment
Share on other sites

If you don't blank out the original contents of the array, how do you keep track of what's new and what's old?

 

It's rare that I use empty elements to keep track of anything, but I covered this scenario in post #43. Testing if an element contains data seems like a somewhat adhoc approach (although admittedly I have done this previously). I sometimes use empty array elements in other ways.

I generally keep track by keeping all the new data tight and contiguous within the array, or I try to design my code in such a way as to avoid the need to know what the elements contain. I agree this may not always be feasible.

What I say is that applying blindly strict directives without taking the context in consideration isn't the best practice to coding in general.

 

Absolutely!

Edited by czardas
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

×
×
  • Create New...