Class construction: function vs. method?

This question could be answered in any general programming forum, but I thought I would get the best response here:
Say I am coding a class and need to create a function; it is only used in the constructor. Would it be better to create a protected/private method, or just write a function within the constructor?
I'm not sure it matters, but I'm really curious; it struck me when I read through a programme I wrote not very long ago, that I seemed to it randomly - unless, of course, more than one method in the class use the function, or it needs to be accessible to the outside (public method).

If piece of code can be reused, it should be extracted into method.
If your method (constructor) gets bulky and you need to organize it - you can again extract pieces into methods.
You should ask if there're any benefits of nested functions
If you want to mark blocks of code inside of your constructor, which creating nested functions basically is, you should use comments
instead of
public function myConstructor() {
     doSomething1();
     function doSomething1() {
     doSomething2();
     function doSomething2() {
you should rather write
public function myConstructor() {
     // do something 1
     // do something 2
I think it's much cleaner and does exactly the same as single-use nested functions. As I said, I would leave nested functions where they belong: to the dark ages of AS2
It doesn't matter how many private functions your class has, if you name them right, there can't be a problem.
Other than extensibility and accessibility matters, I would say it's a matter of programming hygiene not to use nested functions.

Similar Messages

  • Pass C++ Class Member Function as a callable function in AIR Native Extension

    I'm writing an ANE and I'd like to know if anyone has been able to pass a C++ class member function pointer as a callable function from AIR? I have tried this so far with a little bit of C++11 trickery and it's crashing. I've also statically linked the libstdc++ into my library, according to the documentation, in order to ensure that these features I use work correctly. I have code like so:
    FakeWorld* world = new FakeWorld();
    *numFunctions = 1;
    memberFunctions = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * (*numFunctions));
    ANEMemberFunction mCreateFakeBody = std::tr1::bind(&FakeWorld::createFakeBody, world, std::tr1::placeholders::_1, std::tr1::placeholders::_2, std::tr1::placeholders::_3, std::tr1::placeholders::_4);
    ANEFunction* createFakeBody = mCreateFakeBody.target<ANEFunction>();
    memberFunctions[0].name = (const uint8_t*) "createFakeBody";
    memberFunctions[0].functionData = NULL;
    memberFunctions[0].function = createFakeBody;
    FRESetContextNativeData(ctx, (void*)world);
    I just realized I'm using C here for allocating the member functions array.. silly me, but I don't think this is the cause of my issue. I refuse to believe that Adobe has built to the Native Extensions portion of the runtime in such a way that I have to cram every single function I want to create (natively) into a global, C formatted namespace (Especially since the documentation says that C is only required for the extenion and context initializing function interfacing and the rest of the code can be done in C++ or objective-C). So please let me know if and how this is possible and I thank you so much in advance for your time!P.
    P.S. Currently when I run this code, I can do the object initialization just fine. As soon as I invoke the "createFakeBody" method on the native side, the runtime dies and simply says:
    Problem signature:
      Problem Event Name: BEX
      Application Name: adl.exe
      Application Version: 3.1.0.4880
      Application Timestamp: 4eb7612e
      Fault Module Name: StackHash_0a9e
      Fault Module Version: 0.0.0.0
      Fault Module Timestamp: 00000000
      Exception Offset: 00000000
      Exception Code: c0000005
      Exception Data: 00000008
      OS Version: 6.1.7601.2.1.0.256.48
      Locale ID: 1033
      Additional Information 1: 0a9e
      Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
      Additional Information 3: 0a9e
      Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
    Read our privacy statement online:
      http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409
    If the online privacy statement is not available, please read our privacy statement offline:
      C:\Windows\system32\en-US\erofflps.txt
    Thanks again for your assitance.

    It's been a little while since i've dealt with C++ and not up to speed on tr1 or C++0x, so forgive me if i'm not helping.
    The the examples of std::tr1::bind that i'm seeing out there seem to be either dereferencing the bound 'this' pointer when creating the bound method, i.e. in your case *world instead of world, or using std::tr1::ref(*world), therefore i believe that bind expects the bound parameters to be passed by reference.
    Given that the result of std::tr1::bind is callable (basing that on http://stackoverflow.com/questions/3678884/virtual-member-functions-and-stdtr1function-how -does-this-work) could you simplify to the following:
    memberFunctions[0].name = (const uint8_t*) "createFakeBody";
    memberFunctions[0].functionData = NULL;
    memberFunctions[0].function = std::tr1::bind(&FakeWorld::createFakeBody, *world, std::tr1::placeholders::_1, std::tr1::placeholders::_2, std::tr1::placeholders::_3, std::tr1::placeholders::_4);
    Or for an even simpler starting point, creating a test member function 'helloWorld' in FakeWorld that takes no arguments and using:
    memberFunctions[0].name = (const uint8_t*) "helloWorld";
    memberFunctions[0].functionData = NULL;
    memberFunctions[0].function = std::tr1::bind(&FakeWorld::helloWorld, *world);
    Hope this helps.

  • Oracle.xdo.parser.v2.XPathException: Extension function error: Method not f

    Hi,
    I receive this error when I try to view xml from xml publisher template.
    Anybody can help to shed me some lights what to check ? I'm newbie.
    It does contain barcode font. I can view other xml template just fine ( other report )
    and I can view barcode font just fine.
    Only that I'm having error on this new template having barcode font and some query.
    Not sure what's wrong here.
    Thanks.
    Font Dir: C:\Program Files\Oracle\XML Publisher\Template Builder\fonts
    Run XDO Start
    setLocale: en
    java.lang.reflect.InvocationTargetException
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
         at java.lang.reflect.Method.invoke(Unknown Source)
         at oracle.apps.xdo.common.xml.XSLT10gR1.invokeProcessXSL(XSLT10gR1.java:580)
         at oracle.apps.xdo.common.xml.XSLT10gR1.transform(XSLT10gR1.java:378)
         at oracle.apps.xdo.common.xml.XSLT10gR1.transform(XSLT10gR1.java:197)
         at oracle.apps.xdo.common.xml.XSLTWrapper.transform(XSLTWrapper.java:156)
         at oracle.apps.xdo.template.fo.util.FOUtility.generateFO(FOUtility.java:916)
         at oracle.apps.xdo.template.fo.util.FOUtility.generateFO(FOUtility.java:178)
         at oracle.apps.xdo.template.FOProcessor.createFO(FOProcessor.java:1507)
         at oracle.apps.xdo.template.FOProcessor.generate(FOProcessor.java:913)
         at RTF2PDF.runRTFto(RTF2PDF.java:535)
         at RTF2PDF.runXDO(RTF2PDF.java:423)
         at RTF2PDF.main(RTF2PDF.java:217)
    Caused by: oracle.xdo.parser.v2.XPathException: Extension function error: Method not found 'foreach_number'
         at oracle.xdo.parser.v2.XSLStylesheet.flushErrors(XSLStylesheet.java:1526)
         at oracle.xdo.parser.v2.XSLStylesheet.execute(XSLStylesheet.java:517)
         at oracle.xdo.parser.v2.XSLStylesheet.execute(XSLStylesheet.java:485)
         at oracle.xdo.parser.v2.XSLProcessor.processXSL(XSLProcessor.java:264)
         at oracle.xdo.parser.v2.XSLProcessor.processXSL(XSLProcessor.java:150)
         at oracle.xdo.parser.v2.XSLProcessor.processXSL(XSLProcessor.java:187)
         ... 15 more

    Hi Vetsrini, Thank you for your response.
    1. I checked the values in the xml and found no nulls. I see all 0 or non-zero numbers.
    2. Following MetaLink Doc ID 362496.1, I find:
    - PDF Producer: PDF file properties shows PDF Producer "Oracle XML Publisher 5.6.3"
    - AD_BUGS SQL: The SQL results show that I have the 5.6.3 patch, but the SQL in the Doc only includes patch numbers up to 5.6.3. I'm not sure how I can find out the patch numbers of more recent patches, to see if i have those.
    - File version of the MetaInfo.class: $Header MetaInfo.java 115.28 2006/08/17 01:24:59 bgkim noship $
    What is the latest XDO patch? I can't find anything newer than what I have in MetaLink, but I probably am missing something...

  • XPathException: Extension function error: Method not found 'abs'

    Hello,
    I am using -XMLP 5.6.3 on EBS 11.5.10.2
    In XML Publisher Admin, View Template page, I click "Preview". I get a report, but all it contains is a long stack trace containing the following messages:
    java.lang.reflect.InvocationTargetException
    Caused by: oracle.xdo.parser.v2.XPathException: Extension function error: Method not found 'abs'
    In my RTF, the offending code is
    <?when:xdoxslt:abs(ACCOUNTED_CR)>xdoxslt:abs(ACCOUNTED_DR)?>It works fine on my pc where I have BI Publisher Desktop 10.1.3.4

    Hi Vetsrini, Thank you for your response.
    1. I checked the values in the xml and found no nulls. I see all 0 or non-zero numbers.
    2. Following MetaLink Doc ID 362496.1, I find:
    - PDF Producer: PDF file properties shows PDF Producer "Oracle XML Publisher 5.6.3"
    - AD_BUGS SQL: The SQL results show that I have the 5.6.3 patch, but the SQL in the Doc only includes patch numbers up to 5.6.3. I'm not sure how I can find out the patch numbers of more recent patches, to see if i have those.
    - File version of the MetaInfo.class: $Header MetaInfo.java 115.28 2006/08/17 01:24:59 bgkim noship $
    What is the latest XDO patch? I can't find anything newer than what I have in MetaLink, but I probably am missing something...

  • "Function or method not supported" error at IviRFSigGen InitializeWithOptions.vi

    Error 1074135023 at "IviRFSigGen Initialize With Options.vi", Primary Error (Hex 0xBFFA0011) "Function or method not supported". Error occurs when using Agilent IVI driver for RF Signal Generator (E4437B) with LabView. Instrument also does not switch to remote mode in response to the IVI initialize command from LabView, but direct communication using NI-488.2 Communicator works.

    It looks like you are using the NI IVI Class Drivers, and have configured them to use the Agilent IVI-C driver under the hood. For some reason, it looks like the class drivers aren't happy with the Agilent driver, and that's the cause of the error.
    You should first confirm your IVI configuration in MAX. You should make sure IVI Logical Name is pointing to the right Agilent driver, correct instrument address, etc. That name is what you pass into Initialize with Options.
    If this doesn't pan out, it looks like you'll have to debug things.
    First of all, do you need to use IVI? If not, then I'd recommend you download our LabVIEW instrument driver for this instrument, so that you can get LabVIEW source code.
    It's available on http://ni.com/idnet/ at
    href="http://zone.ni.com/idnet97.nsf/9b2b33e1993d877786256436006ec498/539916348394adc7862568ab005fbb....
    If you do need IVI, then I'd suggest you try NI's IVI-C driver for this instrument, also on http://ni.com/idnet/ at this link. This includes LabVIEW Wrapper VIs for the driver.
    If you want to use Agilent's driver, did they provide LabVIEW support with their driver? That is, did they include LabVIEW wrapper VIs? If so, you might try just calling the "AGE4437B InitializeWithOptions.vi" directly and see if you get an error. If they did not provide wrapper functions, I'd call them up and ask if they can give them to you.
    I hope this helps. Let us know what you figure out.
    Brian

  • How to accept 2 strings in a class with try catch method..help!!

    the program below will accept two strings and compare str1 and str2 if equal. this program uses functions. can any one help me with this?
    import java.io.*;
    public class StrCompare {
         private BufferedReader takyoin = null;
         //private BufferedReader intakyo = null;
         * @param args
         public StrCompare(){
              takyoin = new BufferedReader(new InputStreamReader(System.in));
              //intakyo = new BufferedReader(new InputStreamReader(System.in));
         public String UserInput(){
         public static void main(String[] args) {
              // TODO Auto-generated method stub
    }

    What are you talking about? There is no such thing as "try-catch-methods", and there are no functions but methods.
    Strings by the way have their own means of comparision. Apart from that: do your own homework.

  • Automatic generation of ABAP-classes from Function Groups?

    Hey there,
    is there a way of having (SE24)-ABAP-Classes generatetd outomaticaly by providing an existing function group?
    I think, the following mapping shold be possible::
    - the function group is the class
    - its function modules are public (static) methods
    - any form-routines are private methods
    -> I don't want to to that boring work myself, some tool should be able to do that just fine, right? So, is there such a tool?
    Thanks, regards
    Joachim

    Sorry, sounds like the only two people who answered are not aware of such a tool...
    There is one additional point, which I hadn't thought about initially. With ABAP OO you also have a much stricter syntax and many more statement variants that are obsolete and thus cannot be used. This is another hindrance for writing such a tool (but of course not impossible, I just kind of doubt that any reasonable programmer would write such a thing).
    Anyhow, I never understood why SAP is pushing OO so much (declaring all non-OO as obsolete), even going as far as implementing stricter syntax checks for OO. In my opinion a much better option would've been to implement some flag that switches on the more strict syntax checks, similarly to the Unicode check they've introduced. Coding in OO or non-OO, both have its use. Rules from SAP to code everything in OO even in cases where OO doesn't work seems straight silly as a general recommendation: E.g. if I have to code an RFC module, why would I want to bloat my code by introducing a class for implementing the functionality so that the RFC is just a wrapper around the class (unless the additional class gives me some real benefit)?
    As much as I appreciate using OO classes supplied by SAP, I often have difficulties seeing objects in the requirements that I have to code (which might of course just be a reflection of my programming skills). A class with just some static methods is often an indication of poor OO design, i.e. there is no reasonable/tangible object and all you have is a utility class with a collection of various methods. To me it's important that the code is well structured, doesn't have any side effects, etc. This can be achieved with non-OO coding as well as OO, but switching from non-OO to OO doesn't guarantee at all that the code is any better.
    In the end, if you just have a single function group, I'd recommend to do the translation manually and try to apply good OO design principles (instead of a straightforward 1-to-1 translation). E.g. for a class with just static methods (which I'd expect an automated translation would result in) one might want to take a peek at [singletons are evil|http://www.c2.com/cgi/wiki?SingletonsAreEvil] versus [singletons are good|http://www.c2.com/cgi/wiki?SingletonsAreGood]. I know it's silly advice if you're a seasoned OO programmer; but if not, I think your time is much better spent by thinking about the design and then applying it instead of using some automated tools where you'd later have to anyhow do some refactoring...

  • ABAP class or function for retrieving BEx query properties at runtime

    Hello Experts,
    I'm working on BADI RSR_OLAP_BADI and for a special calculation I need to know which characteristics are in the drill-down of the BEX query, sol later on I can aggregate some key figures using only these characteristics.
    Problem is that structure C_s_DATA in method COMPUTE contains all fields of the query (filters, free chars, chars in the rows, etc) and I need to now which characteristics are currently being showing in the Bex analyzer.
    So is there an ABAP class or function module I can use to find out this kind of information at run time?
    Any suggestion?
    Thank you

    Tank you for the feedback,
    I tried to use the class you provided, but I'm stuck now in how to get from within my class that implements RSR_OLAP_BADI interface, a handle, reference, o whatever represent my runtime query (not the query at design time) . As the class you provide must be instantiated before I can use
    In pseudo code could be something like this
    DATA my_query type query_ref.
    my_query = get_rt_query().
    my_query->get_state()
    regards

  • Is is possible to call a function or method before JVM exits ??

    Hi All,
    Is is possible to call a function or method before JVM exits where System.exit() is used.
    I am calling a program where System.exit is used. i need to call a function before the JVM exits.
    Please help me.
    Thanks,
    J.Kathir

    How to call the method ? Did i have to call the shudown hooks method in my main class ?
    Is it possible to have in subclass?
    is the below code is correct ? i am calling a class before System.exit is called....
    java.lang.Runtime.getRuntime().addShutdownHook(...My Own Class()....)

  • Class overhead, function overhead and parameter overhead

    Hi all,
    I am interested in class overhead, function overhead (each function in a class) and parameter overhead (each parameter in function).
    I saw somewhere that class overhead are 200 bytes.
    Is it wise to give up on class and go for functional programming? (Only classes required to run the j2me app are created and nothing else)
    How does function get called? Does it work like a stack? Where each parameters get pushed into the stack and later on pop out when control pass on to the function?
    If your program is full of functions doesn't this make it very processor intensive?
    What is the best solution?
    Thanks in advance!

    Hallo,
    silly question: but what exactly do you mean when you say "full of attributes and methods that will never be used for this instance"?
    I assume that when you have created your class you thought about the attributes and methods you wanted to include, and have not included any unnecessary baggage. I can only think that, perhaps, you have a class X that you would like to reuse, because it does all that you want. The only problem is that, for your specific problem, it carries a lot of excess baggage with it. You only need a few of the attributes and methods. Am I correct?
    Such a class reuse will certainly incur some overheads, but let us try to analyse where they are:
    1. Extra Code. The 'big' class is already defined and probably already loaded, so there should not be any overheads for the code.
    2. Extra Data. Certainly creating a new instance of the 'big' class will require more memory. The question is how big is 'big' class, and how many instances do you want to create or have in existance at any one time? If the class is less than a few kB big and you only need a few instances at any one time, then you can afford to ignore the overhead.
    3. Performance. Every time that you create an instance of the 'big' class, the processor must do some work to initialize it. The question is, what is required to initialize the class? This depends on what is in the constructor.
    4. Programmer Time. If there is an existing class, then it will (probably, depending on documentation) take less time to reuse the class
    than to write another, streamlined class. Someone else will already (hopefully) have debugged the 'big' class.
    I think my view would be to reuse 'big' class unless there good grounds not to do so (see above). Your time is more important than a few overheads.

  • How to use the class CL_CTMENU with the method DISABLE_FUNCTIONS

    Hi Friends,
    How to de-activate some functions in the Menu bar?
    Eg: - Sales document
                 Create
                 Change
                 Display
    I want to de-activate "Change"
    In other words: - How to use the class CL_CTMENU with the method DISABLE_FUNCTIONS in my program.
    Regards,
    Hari
    Edited by: Bhatlapenumarthy Hari Krishna on Jun 9, 2008 5:22 PM

    Krishna,
    It is not possible to deactivate the CHANGE option in themenu bar using the method disable_functions of cass CL_CTMENU. This method allows you to deactivate only the function codes of the CONTEXT MENU, which is available only when u press the left mouse button.
    U can use the SET PF-STATUS 'XXX' EXCLUDING fcodes option to disable the CHANGE.
    *****Reward points if useful
    Regards,
    Kiran Bobbala

  • Reference to Class Member Functions

    Hello all.
    I have a question about references to LV class member functions. I have a small example to demonstrate my problem.
    My test class Base implements a reentrant public dynamic dispatch member function, doSomething.vi. 
    Another test class, Child, inherits Base and overrides the implementation of doSomething.vi.
    Now say I have an array of Base objects (which could include any objects from classes that inherit Base). I want to run the doSomething methods for all the objects in the array in parallel.
    In C++, I'd define a pointer to the virtual member function doSomething, and use it with each object in the array and the correct version of doSomething would be called.
    In Labview, the only way I've found to do it is like this:
    This is less than ideal, because it relies on every child class implementing doSomething, and relies on specific names for the inputs to the method. 
    Is there a better way to do this?
    Thank you,
    Zola

    I still suspect you are over-working this code and not leting LVOOP do tis thing.
    As I understand it you want to creae an active object but detemine its class at run time. The recent Architect summit touched on messaging for what they are calling a "worker Pool" pattern or what-not. YOu may want to search on the summit stuff. lacking that I'll share some images of where I did something similar ( I think). Note this is an older app and new stuff like the "Start Asyncronous call..." has been introduced making this even easier.
    I want to create a new Active Object (thread running in the background) so I invoke a method to do so
    It invokes the following that create some queues for talking to it and getting info back.
    Time does not permit me doing a complete write-up but I have assembled the above images into a LVOOP Albumn found here.
    When you click on one of those images you will get a large view as shown in this example.
    Just below that image you will find a link to the original thread where I posted the image and talked about it.
    I believe the best I can do for you at the moment is to urge you to browse my albumn and chase the links.
    That agllery was assembled in an attmept to help you and other before you asked. I hope it is helpful.
    Ben 
    Ben Rayner
    I am currently active on.. MainStream Preppers
    Rayner's Ridge is under construction

  • What is the functionality CALL METHOD CL_GUI_CFW= FLUSH

    Hi,
    What is the functionality of method "FLUSH" in class CL_GUI_CFW
    Should it be used after every call method CL_GUI_FRONTEND_SERVICES=>......
    What is the purpose of using it? What happens if we don't use it?

    hi
    good
    The class CL_GUI_CFW contains static methods that apply to all instantiated custom controls when you call them.
    You can force a synchronization point in your program by calling a method that is not buffered, or by calling the static method FLUSH.
    CLASS event_handler IMPLEMENTATION.
      METHOD handle_f1.
        DATA row TYPE i.
        MESSAGE i888(sabapdocu) WITH text-003.
        CALL METHOD sender->get_selection_pos
             IMPORTING from_line = row.
        CALL METHOD sender->get_line_text
             EXPORTING line_number = row
             IMPORTING text = field.
        CALL METHOD cl_gui_cfw=>set_new_ok_code 
             EXPORTING new_code = 'F1'.         
        CALL METHOD cl_gui_cfw=>flush.
      ENDMETHOD.
    thanks
    mrutyun^

  • Help... duplicating functions or methods...

    hi, our group is developing a simulation software and we have a problem in duplicating certain function and methods of a class.
    1. Is that possible in java where i could duplicate only specific methods like the thread's run method?
    2. how would i implement it?
    please help me, this is a very important part of our application software

    1) What does "duplicating a function or a method" mean?
    2) What does this have to do with serialization?

  • Error with quantity field:Datasource Creation Using Function Module method

    Problem with DATASOURCE Creation using Function Module method :
    I have created a datasource ZSTANDARD_COST_PRICE using Function Module method . The datasource creation is successfull when I remove the quantity field from the Z table . If I dont remove the quantity field from my Z table it gives an error as "Units Field WAERS for field STPRS of datasource ZSTANDARD_COST_PRICE is hidden". I am not able to remove this error . Please someone guide.
    Let me know if my explanation is not clear enough.
    Thanks in advance,
    Neha.
    Z table definition is as below :
    MATNR MATNR CHAR 18 0 Material Number
    BWKEY BWKEY CHAR 4 0 Valuation area
    LFGJA LFGJA NUMC 4 0 Fiscal Year of Current Period
    STPRS STPRS CURR 11 2 Standard Price   " Here the currency field is WAERS and table T001
    PEINH PEINH DEC 5 0 Price Unit
    VJSTP VJSTP CURR 11 2 Standard price in previous year
    VJPEI VJPEI DEC 5 0 Price unit of previous year.
    Edited by: Neha Rathi on Jan 30, 2009 3:03 PM

    Hi,
    You should add it as one of the main fields as you have added other fields and not as the currency fields...that is..it should be part of the data source and you should be able to see it in RSO2...
    Also if added as i said then it will come as new field in the data source...you can either let it be there...or hide it..
    also if you want to populate it then you will have to write the code for this fields as well.
    Thanks
    Ajeet

Maybe you are looking for