• <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国产乱子伦精品免费| 久久夜色精品国产www| 国产精品美女久久久m| 99久久综合国产精品二区| 久久不射电影网| 热久久视久久精品18| 久久精品人人做人人爽电影蜜月| 高清免费久久午夜精品| 亚洲日本va午夜中文字幕久久 | 青青草原综合久久| 一级做a爰片久久毛片免费陪| 国产精品无码久久综合| 国产精品久久久久久久人人看| 国产精品久久久久…| 亚洲中文久久精品无码ww16| 久久久久综合网久久| 中文字幕人妻色偷偷久久| 久久久久成人精品无码| 久久精品国产亚洲AV无码麻豆| 无码人妻少妇久久中文字幕| 色婷婷久久综合中文久久蜜桃av| 一级做a爰片久久毛片看看 | 国内精品伊人久久久久影院对白| 亚洲人成网亚洲欧洲无码久久 | 久久无码AV一区二区三区| 999久久久国产精品| 国产精品九九九久久九九| 亚洲va久久久噜噜噜久久| 亚洲欧美另类日本久久国产真实乱对白 | 久久久久亚洲AV片无码下载蜜桃| 亚洲精品97久久中文字幕无码| 精品免费久久久久国产一区| 久久se精品一区二区| 97久久精品人人做人人爽| 丁香狠狠色婷婷久久综合| 99国产欧美精品久久久蜜芽| 久久99精品国产自在现线小黄鸭| 久久亚洲精品无码AV红樱桃| 亚洲国产欧美国产综合久久| 色天使久久综合网天天|