[Phpmyadmin-devel] Refactoring challenge

Chanaka Dharmarathna pe.chanaka.ck at gmail.com
Sat Mar 24 22:17:44 CET 2012


On Sat, Mar 24, 2012 at 9:59 PM, Alex Marin <alex.ukf at gmail.com> wrote:

>
> On Sat, Mar 24, 2012 at 6:20 PM, Alex Marin <alex.ukf at gmail.com> wrote:
>
>> Hello,
>>
>> I find these refactoring guidelines useful for everyone, so I'll have a
>> go:
>>
>>     $start = 0;
>>     if ( strlen( $type ) > $GLOBALS['cfg']['LimitChars'] ) {
>>         $start = 13; // strlen( '<abbr title="' );
>>         $type = '<abbr title="' . $type . '">'
>>                   . substr( $type, 0, $GLOBALS['cfg']['LimitChars'] )
>>                    . '</abbr>';
>>     }
>>
>>     unset( $field_charset );
>>     $matches_type = ( substr($type, $start, 4)   == 'char'
>>                               || substr($type, $start, 7)   == 'varchar'
>>                               || substr($type, $start, 4)   == 'text'
>>                               || substr($type, $start, 8)   == 'tinytext'
>>                               || substr($type, $start, 10) == 'mediumtext'
>>                               || substr($type, $start, 8)   == 'longtext'
>>                               || substr($type, $start, 3)   == 'set'
>>                               || substr($type, $start, 4)   == 'enum'
>>      );
>>     $field_charset = '';
>>     if ( $matches_type && ! $extracted_fieldspec['binary'] ) {
>>         if ( strpos( $type, ' character set ' ) ) {
>>             $type = substr( $type, 0, strpos( $type, ' character set ' )
>> );
>>         }
>>         if ( ! empty( $row['Collation'] ) ) {
>>             $field_charset = $row['Collation'];
>>         }
>>     }
>>
>>
>> These are some refactoring modifications I would see fit, but I am sure
>> there are others, so I would like to see different approaches.
>>
>> --
>> Alex
>>
>
> Without the 3 unnecessary newlines of course ( that were inserted
> before my copy-pasted sections).
>
> --
> Alex
>
>
> ------------------------------------------------------------------------------
> This SF email is sponsosred by:
> Try Windows Azure free for 90 days Click Here
> http://p.sf.net/sfu/sfd2d-msazure
> _______________________________________________
> Phpmyadmin-devel mailing list
> Phpmyadmin-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/phpmyadmin-devel
>
>
Hi Marc,

I have not learn yet the PHP code refactoring techniques. But I like to
learn them. I tried to do some improvements on that code (tbl_structure.php
: in current master, these start at line 263 of the script).

changes :
* Create an array for store data types ($dataTypesArray)
* Introduced a Boolean to check whether the string manipulating condition
is true or false ($isTypeMatched)
* Since there was a common pattern in conditions, create those condition
check inside a loop using  $isTypeMatched boolean
* Use meaningful non-common names to new variables
* Keep empty spaces between code snippets to increase the readability of
the code

    $start = 0;
    if (strlen($type) > $GLOBALS['cfg']['LimitChars']) {
        $start = 13;
        $type = '<abbr title="' . $type . '">' . substr($type, 0,
$GLOBALS['cfg']['LimitChars']) . '</abbr>';
    }

    unset($field_charset);
    $dataTypesArray = array('char', 'varchar', 'text', 'tinytext',
'mediumtext', 'longtext', 'set', 'enum');
    $isTypeMatched = false;

    foreach ($dataTypesArray as $dataType) {
        if (substr($type, $start, strlen($dataType)) == $dataType) {
            $isTypeMatched = true;
            break;
        }
    }

    if ($isTypeMatched && !$extracted_fieldspec['binary']) {
        if (strpos($type, ' character set ')) {
            $type = substr($type, 0, strpos($type, ' character set '));
        }
        if (!empty($row['Collation'])) {
            $field_charset = $row['Collation'];
        } else {
            $field_charset = '';
        }
    } else {
        $field_charset = '';
    }

With this, though the number of data types need to increase, only needed
change is adding new data types to $dataTypesArray. No need of adding more
conditions.
Does the above mentioned changes are make the code better ?

Regards !
-- 
____________________________________

Chanaka Indrajith
Bsc.Computer Engineering Undergraduate
Faculty of Engineering
University of Peradeniya
____________________________________
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.phpmyadmin.net/pipermail/developers/attachments/20120325/a3459ce1/attachment.html>


More information about the Developers mailing list