Developer Portal Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 
    SOLVED

    Using Default namespace for object base

    Using Default namespace for object base

    maj9bj
    Long-established Member

    I am developing an object containing Object, Base and Peripheral as usual. In my Base there are some constants defined for usage in Object and also in Peripheral e.g.:

    MyBaseConstants

    {attribute 'qualified_only'}
    VAR_GLOBAL CONSTANT
      MY_DEVICE_PAR_COUNT : DINT := 5;
    END_VAR

    In some examples I found different approaches how to access this constant from object or peripheral:

    1. Use directly MyBaseConstants.MY_DEVICE_PAR_COUNT.
    2. Use namesapace OC_MyBase.MY_DEVICE_PAR_COUNT. Probably without attribute 'qualified only'.
    3. Use namesapace +  global variable list OC_MyBase.MyBaseConstants.MY_DEVICE_PAR_COUNT. Too long for coding.

    What is the right way how to handle it?

    3 REPLIES 3

    nexidator
    Community Moderator
    Community Moderator

    We usually use 1.

    I have never seen 2, but that doesn't mean much. 😉

    3 is safest, of course, but I agree it is too long. The namespace shouldn't be necessary, because when following our recommendation to prefix all GVL names with the library name, the GVL name is most likely unique. And that's all that matters.

    MarvinW
    Long-established Member

    In ATMO we are also using option 1. We have a object creation guideline (on top of the coding guideline) that says that everything that's not INTERNAL has to be prefixed with the object name, including the GVLs. The object name itself is unique, although not prefix-free. But we have never run into a naming conflict and I predict we never will.

    I have seen option 2 before but it causes problems if the library namespace will change. We did change namespaces before, and I am happy we didn't use option 2 at that time 😛

    Option 3 is for purists only, I think 😉

    maj9bj
    Long-established Member

    In the meantime I found biggest disadvantage of option 2, which is you are not able to use it until you pack it in to the library and add it to references. This is not much comfortable during the development, because I need to continuously work with source code of object, base and peripheral in my project. I do not want to create library everytime I change something.

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist