{"id":202,"date":"2007-11-08T16:09:04","date_gmt":"2007-11-08T15:09:04","guid":{"rendered":"http:\/\/bar-solutions.com\/wordpress\/?p=202"},"modified":"2007-11-08T16:09:04","modified_gmt":"2007-11-08T15:09:04","slug":"speed-or-readability","status":"publish","type":"post","link":"https:\/\/blog.bar-solutions.com\/?p=202","title":{"rendered":"Speed or Readability&#8230;"},"content":{"rendered":"<p>I&nbsp;have been&nbsp;thinking about an issue of speed versus readability lately. Which one prevails over the other. I have a case statement and a loop which positions can be interchanged to come to the same result.<\/p>\n<p><!--more--><\/p>\n<p>Consider these two implementations:<\/p>\n<div class=\"wlWriterSmartContent\" id=\"57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:bee077fd-1874-4b15-9904-e457e33a636f\" contenteditable=\"false\" style=\"padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px\">\n<pre style=\"background-color:White;;overflow: auto;;font-family:Microsoft Sans Serif;font-size:9.75\"><div><!--\n\nCode highlighting produced by Actipro CodeHighlighter (freeware)\nhttp:\/\/www.CodeHighlighter.com\/\n\n--><span style=\"color: #0000FF; \">DECLARE<\/span><span style=\"color: #000000; \">\n  caseexpr <\/span><span style=\"color: #0000FF; \">PLS_INTEGER<\/span><span style=\"color: #000000; \">;\n  var <\/span><span style=\"color: #0000FF; \">NUMBER<\/span><span style=\"color: #000000; \">;\n  starttime <\/span><span style=\"color: #0000FF; \">pls_integer<\/span><span style=\"color: #000000; \">;\n  endtime <\/span><span style=\"color: #0000FF; \">pls_integer<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n  caseexpr :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \">;\n  var :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">0<\/span><span style=\"color: #000000; \">;\n  <\/span><span style=\"color: #0000FF; \">FOR<\/span><span style=\"color: #000000; \"> idx <\/span><span style=\"color: #0000FF; \">IN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \"> .. <\/span><span style=\"color: #800080; \">10000000<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">LOOP<\/span><span style=\"color: #000000; \">\n    <\/span><span style=\"color: #0000FF; \">CASE<\/span><span style=\"color: #000000; \"> caseexpr\n      <\/span><span style=\"color: #0000FF; \">WHEN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n        var :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> var <\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \">;\n      <\/span><span style=\"color: #0000FF; \">WHEN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n        var :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> var <\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \">;\n      <\/span><span style=\"color: #0000FF; \">WHEN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n        var :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> var <\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \">;\n      <\/span><span style=\"color: #0000FF; \">WHEN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">4<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n        var :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> var <\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">4<\/span><span style=\"color: #000000; \">;\n    <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">CASE<\/span><span style=\"color: #000000; \">;\n  <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">LOOP<\/span><span style=\"color: #000000; \">;\n  DBMS_OUTPUT.PUT_LINE(to_char(var));\n<\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #000000; \">\/<\/span><span style=\"color: #000000; \">\n<\/span><\/div><\/pre>\n<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http:\/\/dunnhq.com --><\/div>\n<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/p>\n<div class=\"wlWriterSmartContent\" id=\"57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:c57f0d86-b5fd-41d9-a9cc-01e181ec109d\" contenteditable=\"false\" style=\"padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px\">\n<pre style=\"background-color:White;;overflow: auto;;font-family:Microsoft Sans Serif;font-size:9.75\"><div><!--\n\nCode highlighting produced by Actipro CodeHighlighter (freeware)\nhttp:\/\/www.CodeHighlighter.com\/\n\n--><span style=\"color: #0000FF; \">DECLARE<\/span><span style=\"color: #000000; \">\n  caseexpr <\/span><span style=\"color: #0000FF; \">PLS_INTEGER<\/span><span style=\"color: #000000; \">;\n  var <\/span><span style=\"color: #0000FF; \">NUMBER<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n  caseexpr :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \">;\n  var :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">0<\/span><span style=\"color: #000000; \">;\n    <\/span><span style=\"color: #0000FF; \">CASE<\/span><span style=\"color: #000000; \"> caseexpr\n      <\/span><span style=\"color: #0000FF; \">WHEN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n        <\/span><span style=\"color: #0000FF; \">FOR<\/span><span style=\"color: #000000; \"> idx <\/span><span style=\"color: #0000FF; \">IN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \"> .. <\/span><span style=\"color: #800080; \">10000000<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">LOOP<\/span><span style=\"color: #000000; \">\n          var :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> var <\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \">;\n        <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">LOOP<\/span><span style=\"color: #000000; \">;\n      <\/span><span style=\"color: #0000FF; \">WHEN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n        <\/span><span style=\"color: #0000FF; \">FOR<\/span><span style=\"color: #000000; \"> idx <\/span><span style=\"color: #0000FF; \">IN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \"> .. <\/span><span style=\"color: #800080; \">10000000<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">LOOP<\/span><span style=\"color: #000000; \">\n          var :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> var <\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">2<\/span><span style=\"color: #000000; \">;\n        <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">LOOP<\/span><span style=\"color: #000000; \">;\n      <\/span><span style=\"color: #0000FF; \">WHEN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n        <\/span><span style=\"color: #0000FF; \">FOR<\/span><span style=\"color: #000000; \"> idx <\/span><span style=\"color: #0000FF; \">IN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \"> .. <\/span><span style=\"color: #800080; \">10000000<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">LOOP<\/span><span style=\"color: #000000; \">\n          var :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> var <\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">3<\/span><span style=\"color: #000000; \">;\n        <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">LOOP<\/span><span style=\"color: #000000; \">;\n      <\/span><span style=\"color: #0000FF; \">WHEN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">4<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n        <\/span><span style=\"color: #0000FF; \">FOR<\/span><span style=\"color: #000000; \"> idx <\/span><span style=\"color: #0000FF; \">IN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">1<\/span><span style=\"color: #000000; \"> .. <\/span><span style=\"color: #800080; \">10000000<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">LOOP<\/span><span style=\"color: #000000; \">\n          var :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> var <\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800080; \">4<\/span><span style=\"color: #000000; \">;\n        <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">LOOP<\/span><span style=\"color: #000000; \">;\n    <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">CASE<\/span><span style=\"color: #000000; \">;\n  DBMS_OUTPUT.PUT_LINE(to_char(var));\n<\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \">;\n<\/span><\/div><\/pre>\n<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http:\/\/dunnhq.com --><\/div>\n<\/p>\n<p>The first on has one (1) loop in which the case expression is evaluated a lot of times. The second has one (1) case expression which holds a loop for every possible case.<\/p>\n<p>When I ran and timed these snippets (using SELECT to_char(systimestamp, &#8216;SS:FF6&#8217;) FROM dual;&nbsp;before and after the snippets)&nbsp;on both Oracle 11G and Oracle 9i, it appeared&nbsp;the second one&nbsp;performed a little bit faster than the first one. I had to have the loop&nbsp;run 10000000 times to see a little difference, less than half a second, but the second one was a bit faster.<\/p>\n<p>But when it comes to readability, I think the first one wins. This also goes for the maintainability. What if I want to change the loop. The first one just needs a change in one line, the second one needs changes in every case branch.<\/p>\n<p>Seeing that the differences are so tiny, I think I will choose the first option as my implementation, since this is more readable and better maintainable.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&nbsp;have been&nbsp;thinking about an issue of speed versus readability lately. Which one prevails over the other. I have a case statement and a loop which positions can be interchanged to come to the same result.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,5],"tags":[],"class_list":["post-202","post","type-post","status-publish","format-standard","hentry","category-oracle","category-plsql"],"_links":{"self":[{"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/posts\/202","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=202"}],"version-history":[{"count":0,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/posts\/202\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=202"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}