• <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)  編輯 收藏 引用

            精品无码久久久久久久久久| 久久久久久国产精品无码下载| 中文字幕久久亚洲一区| 久久这里有精品| 久久久久AV综合网成人| 色综合久久精品中文字幕首页| 免费观看久久精彩视频| 久久夜色精品国产| 久久99精品国产麻豆| 久久免费国产精品| 久久久久国产精品熟女影院| 久久精品国产国产精品四凭| 一本久久知道综合久久| 国产无套内射久久久国产| 国产一区二区久久久| 久久久综合九色合综国产| 7777精品久久久大香线蕉| 国产精品伦理久久久久久| 色婷婷综合久久久中文字幕| 久久免费视频一区| 久久久久久a亚洲欧洲aⅴ| 国产精品久久新婚兰兰| 久久精品免费大片国产大片| 国产成人久久精品激情| 亚洲精品乱码久久久久久按摩 | 国内精品久久久久国产盗摄| 99精品久久久久久久婷婷| 久久影视综合亚洲| 国产一区二区精品久久凹凸| 国产精品久久久久9999| 精品国际久久久久999波多野| 久久精品视频一| 欧美成a人片免费看久久| 国产成人久久精品二区三区| 久久亚洲高清观看| 久久线看观看精品香蕉国产| 99久久免费国产特黄| 久久久国产精品网站| 久久婷婷久久一区二区三区| 久久91精品久久91综合| 欧美久久综合性欧美|