• <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, 評(píng)論 - 21, 引用 - 0
            數(shù)據(jù)加載中……

            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) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            四虎久久影院| 国产精品天天影视久久综合网| yellow中文字幕久久网| 久久久久亚洲精品无码网址| 亚洲综合伊人久久综合| 色成年激情久久综合| 久久久噜噜噜久久中文字幕色伊伊| 久久99精品久久只有精品| 久久久久香蕉视频| 亚洲色婷婷综合久久| 久久综合五月丁香久久激情| 成人国内精品久久久久影院| 日韩美女18网站久久精品| 久久国产乱子精品免费女| 色青青草原桃花久久综合| 国产精品激情综合久久| 99久久人妻无码精品系列| 国产成人无码精品久久久性色| 国产精品成人精品久久久| 久久精品国产91久久综合麻豆自制| 色老头网站久久网| 青青草原综合久久大伊人导航| AV狠狠色丁香婷婷综合久久| 午夜天堂精品久久久久| 亚洲美日韩Av中文字幕无码久久久妻妇 | 久久九九精品99国产精品| 思思久久99热只有频精品66| 久久精品国产精品亚洲人人| 欧美精品一区二区精品久久 | 亚洲&#228;v永久无码精品天堂久久| 久久天天躁狠狠躁夜夜96流白浆| 色青青草原桃花久久综合| 国产精品无码久久综合网| 色综合久久88色综合天天| 77777亚洲午夜久久多喷| 久久66热人妻偷产精品9| 精品精品国产自在久久高清| 久久久精品一区二区三区| 大蕉久久伊人中文字幕| 国产香蕉97碰碰久久人人| 久久涩综合|