• <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 閱讀(112) 評論(0)  編輯 收藏 引用

            亚洲AV无码久久精品色欲| 久久久久久A亚洲欧洲AV冫| 热re99久久精品国99热| 无码人妻久久一区二区三区免费丨| 久久久久亚洲av成人网人人软件| 狼狼综合久久久久综合网| 99久久亚洲综合精品网站| 2020久久精品亚洲热综合一本| 久久综合久久自在自线精品自| 99久久综合狠狠综合久久| 中文字幕无码精品亚洲资源网久久 | 久久精品国产清高在天天线| 国产精品福利一区二区久久| 久久免费视频6| 99精品久久精品一区二区| 亚洲精品午夜国产va久久| 66精品综合久久久久久久| 亚洲精品WWW久久久久久| segui久久国产精品| 久久国产色AV免费看| 亚洲精品国产字幕久久不卡| 久久夜色精品国产亚洲av| 日本免费一区二区久久人人澡| 人人狠狠综合久久88成人| 久久人人爽人人爽人人爽 | 色婷婷久久综合中文久久蜜桃av | 久久精品成人免费国产片小草| 蜜臀av性久久久久蜜臀aⅴ麻豆| 色综合合久久天天给综看| 久久精品视屏| 久久中文字幕视频、最近更新 | 国产精品久久免费| 精品久久久久久久| 久久综合久久综合久久综合| 精品蜜臀久久久久99网站| 久久亚洲日韩精品一区二区三区| 伊人久久综合精品无码AV专区| 99久久这里只精品国产免费| 99久久国产亚洲综合精品| 国产69精品久久久久久人妻精品| 精品综合久久久久久98|