Re[10]: Вот еще, или я, кажется, читать разучился
От: MTD https://github.com/mtrempoltsev
Дата: 21.02.13 17:01
Оценка: 8 (3) +4 :))) :))
Здравствуйте, alex_public, Вы писали:

_>Ага, ага, помним эту темку... Там ещё дальше есть моё обоснование почему я тоже считаю отказ от исключений хорошей практикой. И вроде никто так и не смог опровергнуть его. )))


Это?

Ну вот собственно я и прошу (тех, кто уверен что исключения — это всегда лучше) показать подходящий юзкейс правильного использования, когда оно улучшило архитектуру или уменьшило объём кода. Потом хочу прикинуть как бы я это сделал без исключений и сравнить объём/читаемость...


Вот из Adobe Illustrator SDK, обрати внимание, как в середине чуваки сами запарились проверять код возврата и тупо забили на обработку ошибок:

ASErr EmptyPanelPlugin::StartupPlugin(SPInterfaceMessage *message)
{
    AIErr err = kNoErr;
    
    // Call base class routine
    err = Plugin::StartupPlugin(message);
    if (err)
        return err;

    AINotifierHandle appShutDownNotifier;
    err = sAINotifier->AddNotifier(fPluginRef, "AI Application Shutdown Notifier", kAIApplicationShutdownNotifier, &appShutDownNotifier);
    if(err)
        return err;
    
    AIErr error = kNoErr;

    // Add About Plugins menu item for this plug-in.
    SDKAboutPluginsHelper aboutPluginsHelper;
    error = aboutPluginsHelper.AddAboutPluginsMenuItem(message, 
                kSDKDefAboutSDKCompanyPluginsGroupName, 
                ai::UnicodeString(kSDKDefAboutSDKCompanyPluginsGroupNameString), 
                "EmptyPanel...", 
                &fAboutPluginMenu);

    if (error)
        return error;

    // Add menu item
    error = sAIMenu->AddMenuItemZString(fPluginRef, "Third Party Panel", kOtherPalettesMenuGroup, ZREF("Third Party Panel"),
                                        kMenuItemNoOptions, &fEmptyPanelPanelMenuItemHandle);
    if (error)
        return error;

    fPanelFlyoutMenu = NULL;
    error = sAIPanelFlyoutMenu->Create(fPanelFlyoutMenu);
    if (error)
        return error;

    error = sAIPanelFlyoutMenu->AppendItem(fPanelFlyoutMenu, 1, ai::UnicodeString("First Item"));
    error = sAIPanelFlyoutMenu->AppendItem(fPanelFlyoutMenu, 3, ai::UnicodeString("Third Item"));
    error = sAIPanelFlyoutMenu->InsertItem(fPanelFlyoutMenu, 3, 2, ai::UnicodeString("Second Item"));
    error = sAIPanelFlyoutMenu->InsertSeparator(fPanelFlyoutMenu, 3, 5);
    error = sAIPanelFlyoutMenu->AppendItem(fPanelFlyoutMenu, 4, ai::UnicodeString("Fourth Item"));

    error = sAIPanelFlyoutMenu->SetItemEnabled(fPanelFlyoutMenu, 4, false);
    error = sAIPanelFlyoutMenu->SetItemMark(fPanelFlyoutMenu, 1 , kAIPanelFlyoutMenuItemMark_BULLET);
    error = sAIPanelFlyoutMenu->SetItemMark(fPanelFlyoutMenu, 2 , kAIPanelFlyoutMenuItemMark_CHECK);
    error = sAIPanelFlyoutMenu->SetItemMark(fPanelFlyoutMenu, 3 , kAIPanelFlyoutMenuItemMark_DASH);

    AISize pnSize = {240, 320};
    error = sAIPanel->Create(fPluginRef, ai::UnicodeString("Third Party Panel"), ai::UnicodeString("Third Party Panel"), 3, pnSize, true, fPanelFlyoutMenu, this, fPanel);
    if (error)
        return error;

    AISize minSize = {50, 50};
    AISize maxSize = {800, 800};
    AISize prefConstSize = {100, 100};
    AISize prefUnconstSize = {600, 600};

    error = sAIPanel->SetSizes(fPanel, minSize, prefUnconstSize, prefConstSize, maxSize);

    error = sAIPanel->Show(fPanel, true);
    error = sAIPanel->SetFlyoutMenuPreVisibilityProc(fPanel, flyoutMenuPreVisFunc);
    error = sAIPanel->SetFlyoutMenuProc(fPanel, PanelFlyoutMenuProc);
    error = sAIPanel->SetVisibilityChangedNotifyProc(fPanel, PanelVisibilityChangedNotifyProc);
    error = sAIPanel->SetSizeChangedNotifyProc(fPanel, PanelSizeChangedNotifyProc);
    error = sAIPanel->SetStateChangedNotifyProc(fPanel, PanelStateChangedNotifyProc);
    error = sAIPanel->SetClosedNotifyProc(fPanel, PanelClosedNotifyProc);

    error = SetIcon();

    error = AddWidgets();
    
    //Add Menu Item for Control Bar
    if(!error)
        error = sAIMenu->AddMenuItemZString(fPluginRef, "Third Party Control Bar", kOtherPalettesMenuGroup, ZREF("Third Party Control Bar"),
                                            kMenuItemNoOptions, &fEmptyPanelControlBarMenuItemHandle);
    
    //Create Control Bar
    AISize sizeControlBar = {controlBarWidth, controlBarHeight};
    if(!error)
        error = sAIControlBar->Create(fPluginRef, sizeControlBar, controlBarWidthMin, controlBarWidthMax,NULL/*Userdata*/,fControlBar);
    if(!error)
        error = sAIControlBar->SetUserData(fControlBar, this);
    
    //Set Callbacks
    if(!error)
        error = sAIControlBar->SetVisibilityChangedNotifyProc(fControlBar, ControlBarVisibilityChangedNotifyProc);
    if(!error)
        error = sAIControlBar->SetSizeChangedNotifyProc(fControlBar, ControlBarSizeChangedNotifyProc);
    
    //Add Different Widgets to Control Bar
    if(!error)
        AddWidgetsToControlBar();
    
    return error;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.