• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Life is Good.

            Enhance Tech and English
            隨筆 - 65, 文章 - 20, 評論 - 21, 引用 - 0
            數據加載中……

            Sorting out behavior of "IF / ELSE"

            Sorting out behavior of “IF / ELSE “

             

            The “ELSE” part of an IF statement is assumed in Lisp. So, if not careful, you may get unexpected behavior.

             

            Here is a recent change (in blue/gray highlight) someone pushed up to Perforce for one of the  lisp files:

               (setq x nil)

              (setq cnt 0)

              (while (< cnt (length ss))

                (if (nth cnt ss)

                  (setq en (handent (nth cnt ss)))

                  (if en

                    (progn

                      (setq x value1)

                      (if (not x)

                        (setq x value2)

                      )

                    )

                  )

                )

             

            This looks pretty benign… but it will likely cause a regression.

             

            To better see this problem, here is the same code with an “ELSE” comment inserted where end of the “True” part of the IF statement ends and the assumed “else” part of the if statement begins:

             

               (setq x nil)

              (setq cnt 0)

              (while (< cnt (length ss))

                (if (nth cnt ss)

                  (setq en (handent (nth cnt ss)))

                             ; ELSE

                  (if en

                    (progn

                      (setq x value1)

                      (if (not x)

                        (setq x value2)

                      )

                    )

                  )

                )

             

            So, here’s what will happen. The IF statement checks (nth cnt ss) to see if it is non-nil. If it is non-nil, then it fills variable “en” with the converted handle value in (nth cnt ss). Then it exits the IF statement. But, if (nth cnt ss) is nil, then a second IF statement checks undefined / uninitialized variable “en” and, if it happens to be non-nil, tries to do something with it. Likely it will do something not expected or desired.

             

            Grouping lines of code in an IF statement

             

            A better way to set up this IF/ELSE statement is probably something like this:

             

              (setq x nil)

              (setq cnt 0)

              (while (< cnt (length ss))

                (if (nth cnt ss)

                  (progn

                    (setq en (handent (nth cnt ss)))

                    (if en

                      (progn

                        (setq x value1)

                        (if (not x)

                          (setq x value2)

                        )

                      )

                    )

                  )

                )

             

            The beginning “(progn” and ending “)” to balance it groups all of the in-between lines of code to be executed for the “True” part of the IF statement. This is probably what needs to happen here.

             

            So, two things to watch for which may help avoid creating new regressions:

            1.       Go ahead and show the “; ELSE” comment in an IF statement when both conditions are being coded up.

            2.       Use the “(progn “ flag to group two or more lines of code together that need to execute for a single condition of the IF statement

            posted on 2008-08-08 13:46 Mike Song 閱讀(108) 評論(0)  編輯 收藏 引用

            色综合久久天天综合| 狠狠色丁香久久婷婷综合蜜芽五月 | 亚洲日本va中文字幕久久| 国内精品久久久久久99蜜桃| 久久久久亚洲av综合波多野结衣| 亚洲国产成人精品91久久久 | 一本久久免费视频| 国内精品伊人久久久久网站| 97久久超碰国产精品2021| 伊人久久精品无码二区麻豆| 欧美久久久久久精选9999| 久久不见久久见免费影院www日本| 国产999精品久久久久久| 久久久久免费精品国产| 久久久这里有精品中文字幕| 九九久久精品无码专区| 久久影院久久香蕉国产线看观看| 久久久久久精品免费免费自慰| 久久亚洲AV成人无码软件| 精品久久久久久无码不卡| 久久国产AVJUST麻豆| 亚洲国产精品无码久久98| 精品国产VA久久久久久久冰| 久久久久亚洲av成人无码电影| 久久婷婷是五月综合色狠狠| 久久国产综合精品五月天| 色综合久久综合网观看| 久久精品国产精品亚洲人人| 精品国产综合区久久久久久| 久久频这里精品99香蕉久| 亚洲va中文字幕无码久久 | 久久久噜噜噜久久中文字幕色伊伊 | 国产成年无码久久久免费| 无码专区久久综合久中文字幕| 国产女人aaa级久久久级| 久久精品国产亚洲7777| 无码精品久久久久久人妻中字| 久久狠狠一本精品综合网| 久久成人国产精品免费软件| 蜜桃麻豆www久久| 亚洲日本va中文字幕久久|