Wednesday, July 20, 2022

Re: Need help on reducing cognitive complexity

On 21/07/2022 3:52 pm, Sencer Hamarat wrote:
> Hi everyone,
>
> I have a code block with high cognitive complexity below:
>
>     @staticmethod
>     def in_circle_check(obj_type, item, uuid, item_is_array=False):

Partly because the args seem weird.

Try writing a docstring which says what the method needs to do. Then
rewrite the code as nested if statements, bearing in mind that if
nothing fits, it will fall through to the end and return either None or
whatever you want to return, perhaps -1.

>
>         if obj_type not in ['trees', 'flowers']:
>             return None
>
>         plant = get_plant_with_circles(uuid)
>         if not plant:
>             return None
>
>         if obj_type == 'trees':
>             if plant['in_all_tree_types']:
>                 return True
>             circle_objects = plant['tree_circle']['items']
>         else:
>             if plant['in_all_flower_types']:
>                 return True
>             circle_objects = plant['flower_circle']['items']
>
>         if isinstance(circle_objects, list):
>             if item_is_array:
>                 for item in item:
>                     if item not in circle_objects:
>                         return -1
>                 return True
>             else:
>                 if item in circle_objects:
>                     return True
>         else:
>             return -1
>
>         return -1
>
>
> I try to move the first 3 if statements on the beginning of the block
> into new methods but that maneuver ends up with raising complexity.
>
> Can anybody help me to learn how to reduce cognitive complexity in
> code blocks like this?
>
> Kind regards,
> Sencer HAMARAT
>
> --
> You received this message because you are subscribed to the Google
> Groups "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to django-users+unsubscribe@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/CACp8TZhBa9EbekcT1ApmzdDRVk2vCb64%3DvvXHrSawO2RJSySpQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/django-users/CACp8TZhBa9EbekcT1ApmzdDRVk2vCb64%3DvvXHrSawO2RJSySpQ%40mail.gmail.com?utm_medium=email&utm_source=footer>.


--
Signed email is an absolute defence against phishing. This email has
been signed with my private key. If you import my public key you can
automatically decrypt my signature and be sure it came from me. Just
ask and I'll send it to you. Your email software can handle signing.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/fbbd1ba9-47ac-64de-88cc-5a784e151db3%40dewhirst.com.au.

No comments:

Post a Comment