Рефакторинг по-эрланговски :)
От: Mamut Швеция http://dmitriid.com
Дата: 18.09.06 14:02
Оценка: 21 (2) :)
Тут я что-то подумал.

Если бы писал нечто подобное (мечты! мечты!), то, будучи насквозь императивщиком, я бы, наверное, проделал следующую эволюцию:

Сначала напишем через кучу case'ов (как в исходном сообщении
Автор:
Дата: 17.09.06
):
start(Driver) ->
    case Driver of
        mysql ->
            % совершаем коннект
            {};
        mnesia ->
            % совершаем коннект
            {};
        odbc ->
            % совершаем коннект
            {}
    end.


После чего я бы почесал репу, увидев, что процедура подсрединения к каждому драйверу довольно длинная, и переписал бы:

start(Driver) when Driver == mysql ->
    % совершаем коннект
    {};
start(Driver) when Driver == mnesia ->
    % совершаем коннект
    {};
start(Driver) when Driver == odbc ->
    % совершаем коннект
    {}.


А потом кто-нибудь (на RSDN или в erlang-questions) показал бы мне (а может, я и сам бы догадался — ), что все это дело можно еще сократить:
start(mysql) ->
    % совершаем коннект
    {};
start(mnesia) ->
    % совершаем коннект
    {};
start(odbc) ->
    % совершаем коннект
    {};


Следующим шагом было бы добавление Options, и, собственно, приход к результату:

start(Driver) ->
    start(Driver, []).
        
start(mysql, Options) ->
    % совершаем коннект
    {};
    
start(_, _) ->
    {error, driver_not_supported}.



Я уже говорил, что Эрланг рулит?

Кстати. Примерно такую же процедуру я прошел в своем http://orcas.googlecode.com/svn/trunk/src/test.erl для функции tagStart
... << RSDN@Home 1.2.0 alpha rev. 655>>


dmitriid.comGitHubLinkedIn
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.