Salakhetdinov Shamil
mcp2004 at mail.ru
Tue Nov 27 17:10:25 CST 2012
Thank you, Stuart, Yes, your (1), (2) and (3) are common (good old) reasons to use "one-liners". I used to use them in the past. But AFAIS nowadays development (within .NET) puts (2) and (3) under an (big) question mark: (2) - "easy to read one-liners" used in many places in one's code base and stored in different code libraries/assemblies could result in (significantly) higher maintenance costs; (3) - advanced intellisense helps developers to quickly type long complicated "one-liners". And (1) doesn't matter that much as .NET compilers/builders can optimize "one-liners"' calls by calling their code directly... Still "one-liners" can be used but better not stored in a separate code library/assembly - in this case their usage becomes very similar to C/C++ macros/templates... -- Shamil Wed 28 Nov 2012 08:05:17 от "Stuart McLachlan" <stuart at lexacorp.com.pg>: > > > > >Such one line functions are very useful where > > 1. You are not using them many times in a loop, but multiple times at various places in your > application > > 2. You want easy to read code with descriptive function names for maintenance purposes. > > 3. You want to save repeatedly typing an long, complicated function :-> > > > It would be nice if VBA had Macro capabilities like C / C++ and PowerBasic - to name a few. > Then you could get the same advantages without the overhead of the function call > > I use BoM(Date()) and EOM(Date()) frequently as default values in text boxes on Report > Menus. It is a lot more obvious what the code does and the time is irrelevant. (and I am less > likely to make a typo when entering it <g>) > > > -- > Stuart > > On 27 Nov 2012 at 21:50, Salakhetdinov Shamil wrote: > > > Hi Arthur and Stuart, > > > > Here is a bit quicker version of EoM :) > > > > Public Function EoM2(dt As Date) EoM2 = DateSerial(Year(dt), Month(dt) > > + 1, 0) End FunctionIf a bit more seriously what's the use of such one > > line function(s)? - as you can find from the test results below almost > > 25% of time is spent to pass parameter(s) and to get return value. Of > > course that are just microseconds but imagine you have a lot of such > > "one-liners" and they are called in cycles etc. > > > > Thank you. > > > > -- Shamil > > > > P.S. Tests results: > > > > EoM: Elapsed time = 0.140625 > > EoM2: Elapsed time = 0.125 > > Inline: DateSerial(Year(dt), Month(dt) + 1, 0): Elapsed time = 0.09375P.P.S. Test code: > > > > Option Compare Database > > Public Sub Test() > > Const MAX_COUNT As Long = 100000 > > Dim startTime As Single > > Dim endTime As Single > > Dim counter As Long > > Dim testName As String > > Dim result As Date > > Dim dt As Date > > dt = Now > > ' EoM > > testName = "EoM" > > startTime = Timer > > For counter = 1 To MAX_COUNT > > result = EoM(dt) > > Next counter > > endTime = Timer > > Debug.Print testName & ": Elapsed time = " & (endTime - startTime) > > ' EoM2 > > testName = "EoM2" > > startTime = Timer > > For counter = 1 To MAX_COUNT > > result = EoM2(dt) > > Next counter > > endTime = Timer > > Debug.Print testName & ": Elapsed time = " & (endTime - startTime) > > ' Inline: DateSerial(Year(dt), Month(dt) + 1, 0) > > testName = "Inline: DateSerial(Year(dt), Month(dt) + 1, 0)" > > startTime = Timer > > For counter = 1 To MAX_COUNT > > result = DateSerial(Year(dt), Month(dt) + 1, 0) > > Next counter > > endTime = Timer > > Debug.Print testName & ": Elapsed time = " & (endTime - startTime) > > End Sub > > Public Function EoM(dt As Date) > > EoM = DateSerial(Year(dt), Month(dt) + 1, 1) - 1 > > End Function > > Public Function EoM2(dt As Date) > > EoM2 = DateSerial(Year(dt), Month(dt) + 1, 0) > > End Function > > > > > > Tue 27 Nov 2012 00:08:11 Arthur Fuller <fuller.artful at gmail.com>: > > > > > > > > > > > > > > > > > > > > > > > > >There we go. Thanks! > > > > > > > > > > > > > > > On Mon, Nov 26, 2012 at 11:27 PM, Stuart McLachlan > > > > > <stuart at lexacorp.com.pg>wrote: > > > > > > > > > > > Alternative (simpler?) functions: > > > > > > > > > > > > Public Function BoM(dt As Date) As Date > > > > > > BoM = DateSerial(year(dt),month(dt),1) > > > > > > End Function > > > > > > > > > > > > Public Function BoY(dt As Date) As Date > > > > > > BoY = DateSerial(year(dt),1,1) > > > > > > End Function > > > > > > > > > > > > Public Function EoY(dt As Date) As Date > > > > > > EoY = Dateserial(year(dt),12,31) > > > > > > End Function > > > > > > > > > > > > Public Function EoM(dt as date) > > > > > > EOM = DateSerial(year(dt),month(dt) +1,1) -1 > > > > > > End Function > > > > > > > > > > > > > > ><<< skipped >>> > > -- > > AccessD mailing list > > AccessD at databaseadvisors.com > > http://databaseadvisors.com/mailman/listinfo/accessd > > Website: http://www.databaseadvisors.com > > > > -- > AccessD mailing list > >AccessD at databaseadvisors.com > >http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com > > >