よくわかる条件分岐

5,484 views

Published on

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,484
On SlideShare
0
From Embeds
0
Number of Embeds
2,175
Actions
Shares
0
Downloads
10
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

よくわかる条件分岐

  1. 1. よくわかる条件分岐 トゴル・カンパニー 伊藤のりゆき
  2. 2. アジェンダ1. ⾃⼰紹介2. 条件分岐<mt:If>の3つのパターン• フラグ• ⼆択• より複雑 5%3. まとめ 15% 80%
  3. 3. 伊藤のりゆき • 有限会社トゴル・カンパニー 代表取締役 • オーサリングエンジニア • 1-3「Movable Typeテンプレートのカスタマイ ズ基礎」執筆 • 『Movable Type⼊⾨』(Think IT) • 『NORIのFlashユーザのためのMovable Type 講座 gihyo.jp版』 • Twitter : @nori_togoru • Facebook facebook.com/nori.3oclock バージョンアップ • トゴル・カンパニー togoru.net • 個⼈サイト 3oclock.com『Movable Type プロフェッショナル・スタイル MT4.1対応』
  4. 4. MTタグ<mt:If>
  5. 5. 条件分岐<mt:If>の共通基本動作変数の値(あたい)によって タグの中を処理する
  6. 6. 変数…• 数値や⽂字など⾃由に 設定できる仮定の値(あたい)• 名前=変数名「sample」• nameモディファイア ↓ name =“sample”
  7. 7. タグの中…<mt:If> 〜</mt:If>
  8. 8. 3つのパターン • フラグ 変数値が1かどうか • ⼆択 変数値が1か2か • より複雑 変数値が1か2か3か……etc値が0の場合=特別な意味なので除外
  9. 9. フラグ•1→フラグが⽴っている →タグの中を処理•0→フラグが寝ている →タグの中をスキップ
  10. 10. MTテンプレート(1)<mt:If name =“sample”> メッセージ</mt:If> ↓変数sampleに1がセットされてい れば「メッセージ」と表⽰する
  11. 11. インデックステンプレート
  12. 12. 出⼒は「○○.txt」
  13. 13. [プレビュー]
  14. 14. まとめ:MTタグのテスト1.インデックステンプレート2.出⼒は「○○.txt」3.[プレビュー]
  15. 15. 結果
  16. 16. メッセージを表⽰するには… フラグを⽴てる変数「sample」に1をセット<mt:If name=“sample”> メッセージ</mt:If>
  17. 17. 変数の値をセット• <mt:SetVar>• nameモディファイア・・・変数名 <mt:If>にあるnameモディファイアと同じ• valueモディファイア・・・値
  18. 18. <mt:SetVar><mt:SetVar name=“sample” value=“1” > ↓ 変数「sample」に”1”をセット フラグを⽴てる
  19. 19. フラグを利⽤するMTテンプレート (2)<mt:SetVar name=“sample” value=“1”><mt:If name =“sample”> メッセージ</mt:If>
  20. 20. MTテンプレート(2)結果
  21. 21. まとめ:メッセージが表⽰されない…メッセージなし → <mt:if>の中をスキップ → フラグが寝ている → sample=0 または未設定 → ⽐較結果がFalse(×)である
  22. 22. まとめ:メッセージが表⽰される…メッセージあり → <mt:if>の中を実⾏ → フラグが⽴っている → sample=1 → ⽐較結果がTrue(○)である
  23. 23. 素朴な疑問1. sampleの値が1以外の時は? 2,3,10,100,-1,-100,0.4,-0.5,0…2. sampleの値が⽂字の時は? “あ” ”a” ”A” “ABC”…3. sampleとSAMPLE、Sampleは同じ結 果? テストしてみた
  24. 24. 疑問(1)-1<mt:SetVar name="sample" value="2"><mt:If name=“sample”> メッセージ</mt:If>
  25. 25. 疑問(1)-2<mt:SetVar name="sample" value=“3"><mt:If name=“sample”> メッセージ</mt:If>
  26. 26. 疑問(1)-3<mt:SetVar name="sample" value=“10"><mt:If name=“sample”> メッセージ</mt:If>
  27. 27. 疑問(1)-4<mt:SetVar name="sample" value=“100"><mt:If name=“sample”> メッセージ</mt:If>
  28. 28. 疑問(1)-5<mt:SetVar name="sample" value=“-1"><mt:If name=“sample”> メッセージ</mt:If>
  29. 29. 疑問(1)-6<mt:SetVar name="sample" value=“-100"><mt:If name=“sample”> メッセージ</mt:If>
  30. 30. 疑問(1)-7<mt:SetVar name="sample" value=“0.4"><mt:If name=“sample”> メッセージ</mt:If>
  31. 31. 疑問(1)-8<mt:SetVar name="sample" value=“-0.5"><mt:If name=“sample”> メッセージ</mt:If>
  32. 32. 疑問(1)-9<mt:SetVar name="sample" value=“0"><mt:If name=“sample”> メッセージ</mt:If> 本当に0でメッセージは⾮表⽰になるのか?
  33. 33. 疑問(2)-1<mt:SetVar name=“sample” value=“あ"><mt:If name=“sample”> メッセージ</mt:If>
  34. 34. 疑問(2)-2<mt:SetVar name="sample" value=“a"><mt:If name=“sample”> メッセージ</mt:If>
  35. 35. 疑問(2)-3<mt:SetVar name=“sample” value=“A”><mt:If name=“sample”> メッセージ</mt:If>
  36. 36. 疑問(2)-4<mt:SetVar name="sample" value=“ABC"><mt:If name=“sample”> メッセージ</mt:If>
  37. 37. 疑問(3)-1<mt:SetVar name=“SAMPLE” value=“1"><mt:If name=“sample”> メッセージ</mt:If>
  38. 38. 疑問(3)-2<mt:SetVar name=“Sample” value=“1"><mt:If name=“sample”> メッセージ</mt:If>
  39. 39. 検証結果• sampleの値が1以外の時は? →0(ゼロ)の時だけ、メッセージなし マイナスも、0.5も、メッセージあり• sampleの値が⽂字の時は? →メッセージあり• sampleとSAMPLEは同じ結果? →同じ結果=⼤⽂字⼩⽂字は無関係
  40. 40. テンプレートが⾃⼰判断 カテゴリ別 ⽉別ブログ記事リスト ウェブページ ブログ記事リスト<mt:SetVarname=“catArchive”value=“1”> <mt:Include> <mt:Include> <mt:Include> フラグで⾃⼰判断する テンプレートモジュール <mt:If name=“catArchive”> 〜カテゴリ別ブログ記事リスト専⽤処理〜 </mt:If>
  41. 41. あらかじめ決まっているフラグ1. P62-P63のMTの予約変数 アーカイブテンプレート、インデックス テンプレート、システムテンプレート1. catArchive → category_archive2. <mt:If>ですぐに利⽤できる
  42. 42. 予約変数に置換<mt:If name=“catArchive”> 〜カテゴリ別ブログ記事リスト専⽤処理〜</mt:If><mt:If name=“category_archive”> 〜カテゴリ別ブログ記事リスト専⽤処理〜</mt:If>
  43. 43. アーカイブテンプレートを識別する予約変数名を表⽰する• アーカイブの種類によって表⽰する予約 変数名が異なる<mt:SetVar name=“class-name” value=“$archive_class”><mt:If name=“class-name”><mt:SetVarBlock name=“class_name”><mt:GetVar replace=“-”,“_” name=“class-name”></mt:SetVarBlock><p>予約変数:<mt:GetVar name="class_name"> = <mt:GetVar name="$class_name"></p></mt:If>
  44. 44. あと20%
  45. 45. ⼆択変数の値が1または2の時は? ↓読み替え変数の値が1か,それ以外の時は?
  46. 46. 「1か」 具体的な値との⽐較 = モディファイア「eq」<mt:If name=“sample” eq=“1” > メッセージ・・・sampleは1です</mt:If>
  47. 47. 「それ以外」<mt:If> 〜<mt:Else> 〜それ以外の処理〜</mt:If>
  48. 48. ⼆択のMTテンプレート<mt:If name=“sample” eq=“1”> メッセージ 1です<mt:Else> メッセージ 1以外です。</mt:If>
  49. 49. ⽐較(演算⼦)のモディファイア1 eq … equal = 等しい ne … not equal != 等しくない
  50. 50. ⽐較(演算⼦)のモディファイア2 lt … less than < 未満 gt … greater than > 他にもあるので より⼤きい オンラインヘル プを参照
  51. 51. より複雑 1か2か3か……etc <mt:If>で判断できるのは1つ ↓ 判別したいのは3個以上(2個までなら<mt:Else>を利⽤) ↓ 判別する数だけ繰り返す
  52. 52. <mt:If>の繰り返し<mt:If name=“sample” eq=“1” > sampleは「1」です</mt:If><mt:If name=“sample” eq=“2” > メリット:分岐の数 sampleは「2」です が増えても繰り返す</mt:If> だけなので分かりや すい<mt:If name=“sample” eq=“3” > デメリット: sampleは「3」です sample=1だと、そ</mt:If> の後の分岐はテスト する必要がないが、 実⾏してしまう
  53. 53. より⾼度に<mt:If name=“sample” eq=“1”> sample は1です<mt:ElseIf eq=“2”> sample は2です<mt:ElseIf eq=“3”> sample は3です<mt:Else> メリット:sample=1の時は sample は4です <mt:If>を1度しか実⾏しな くてよい</mt:If> デメリット:分岐が複雑にな ると混乱する
  54. 54. まとめ:条件分岐(1)• MTタグ <mt:If>• 変数の中⾝を特定の値と⽐較し、結果次 第で動作内⽤を変える。• ⽐較結果… 「○(True)」か「×(False)」• ⽐較結果が「○(True)」の時だけ <mt:If> の中を実⾏する。
  55. 55. まとめ:条件分岐(2) 3つのパターン• フラグ 1かどうか nameモディファイア• ⼆択 1か2か ⽐較演算⼦(eq,ne……) <mt:Else>• より複雑 1か2か3か……etc 繰り返し
  56. 56. 以上です。ありがとうございました。 トゴル・カンパニー 伊藤のりゆき

×