ar.falsy.cat/note/info-tech/dart/index.html
2023-08-14 10:30:42 +00:00

109 lines
30 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html><html lang=en><head><meta charset=utf-8><meta name=description content="概要 Google製プログラミング言語 flutterのための言語 日本語資料少なめ オブジェクト指向 特徴 undefined behaviorは無い Null safety 型名に?を付ければNull許容型になる Null許容型に対してはNullチェックをしないとコンパイラがキレる 整数値以外は参照型 GCmark & sweep搭載 デストラクタは無さそうそもそもmark & sweepでデストラクタは信頼できない コンストラクタが書きやすい わざわざメンバ変数と同じ名前の引数を書いて,代入して,,,ということをしなくてもいい 静的解析が強め 文法 大体は既存のやつと同じ 文末セミコロン必須 関数呼び出しの実引数リストでもケツカンマ許容 変数修飾子 型が自明な場合,型名は省略できる 省略できる場合は省略することが推奨される 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // コンパイル時定数 const int x = 0; const x = 0; // 再代入不可能変数 final int x = 0; final x = 0; // 再代入可能変数 var int x = 0; var x = 0; // 遅延初期化変数 late int x; late final int x; final: 再代入不可能変数 値型の変数に対しては,値の変更を禁止する 参照型の変数に対しては,参照先の変更のみを禁止する dartでは参照先のオブジェクトの変更を禁止することはできない late: 遅延初期化 変数の初期化を遅延させることができる 実質的にはNull safetyの無いNull許容型 late final修飾子によって複数回の代入をコンパイルエラーにできる ただし静的解析の精度は微妙なので絶対に2回目の代入ができなくなるわけではない Null safety Null許容型に対してはNullを扱いやすくするための演算子が使える 関数の中で変数に対して一度nullチェックをした場合以降その変数はNull許容型でないものとして扱える 1 2 3 4 5 6 7 8 9 10 11 12 13 14 (T?"><meta property="og:title" content="dart言語"><meta property="og:description" content="概要 Google製プログラミング言語 flutterのための言語 日本語資料少なめ オブジェクト指向 特徴 undefined behaviorは無い Null safety 型名に?を付ければNull許容型になる Null許容型に対してはNullチェックをしないとコンパイラがキレる 整数値以外は参照型 GCmark & sweep搭載 デストラクタは無さそうそもそもmark & sweepでデストラクタは信頼できない コンストラクタが書きやすい わざわざメンバ変数と同じ名前の引数を書いて,代入して,,,ということをしなくてもいい 静的解析が強め 文法 大体は既存のやつと同じ 文末セミコロン必須 関数呼び出しの実引数リストでもケツカンマ許容 変数修飾子 型が自明な場合,型名は省略できる 省略できる場合は省略することが推奨される 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // コンパイル時定数 const int x = 0; const x = 0; // 再代入不可能変数 final int x = 0; final x = 0; // 再代入可能変数 var int x = 0; var x = 0; // 遅延初期化変数 late int x; late final int x; final: 再代入不可能変数 値型の変数に対しては,値の変更を禁止する 参照型の変数に対しては,参照先の変更のみを禁止する dartでは参照先のオブジェクトの変更を禁止することはできない late: 遅延初期化 変数の初期化を遅延させることができる 実質的にはNull safetyの無いNull許容型 late final修飾子によって複数回の代入をコンパイルエラーにできる ただし静的解析の精度は微妙なので絶対に2回目の代入ができなくなるわけではない Null safety Null許容型に対してはNullを扱いやすくするための演算子が使える 関数の中で変数に対して一度nullチェックをした場合以降その変数はNull許容型でないものとして扱える 1 2 3 4 5 6 7 8 9 10 11 12 13 14 (T?"><meta property="og:type" content="website"><meta property="og:image" content="https://ar.falsy.cat/icon.png"><meta property="og:url" content="https://ar.falsy.cat/note/info-tech/dart/"><meta property="og:width" content="200"><meta property="og:height" content="200"><meta name=twitter:card content="summary"><meta name=twitter:title content="dart言語"><meta name=twitter:description content="概要 Google製プログラミング言語 flutterのための言語 日本語資料少なめ オブジェクト指向 特徴 undefined behaviorは無い Null safety 型名に?を付ければNull許容型になる Null許容型に対してはNullチェックをしないとコンパイラがキレる 整数値以外は参照型 GCmark & sweep搭載 デストラクタは無さそうそもそもmark & sweepでデストラクタは信頼できない コンストラクタが書きやすい わざわざメンバ変数と同じ名前の引数を書いて,代入して,,,ということをしなくてもいい 静的解析が強め 文法 大体は既存のやつと同じ 文末セミコロン必須 関数呼び出しの実引数リストでもケツカンマ許容 変数修飾子 型が自明な場合,型名は省略できる 省略できる場合は省略することが推奨される 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // コンパイル時定数 const int x = 0; const x = 0; // 再代入不可能変数 final int x = 0; final x = 0; // 再代入可能変数 var int x = 0; var x = 0; // 遅延初期化変数 late int x; late final int x; final: 再代入不可能変数 値型の変数に対しては,値の変更を禁止する 参照型の変数に対しては,参照先の変更のみを禁止する dartでは参照先のオブジェクトの変更を禁止することはできない late: 遅延初期化 変数の初期化を遅延させることができる 実質的にはNull safetyの無いNull許容型 late final修飾子によって複数回の代入をコンパイルエラーにできる ただし静的解析の精度は微妙なので絶対に2回目の代入ができなくなるわけではない Null safety Null許容型に対してはNullを扱いやすくするための演算子が使える 関数の中で変数に対して一度nullチェックをした場合以降その変数はNull許容型でないものとして扱える 1 2 3 4 5 6 7 8 9 10 11 12 13 14 (T?"><meta name=twitter:image content="https://ar.falsy.cat/icon.png"><title>dart言語</title><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" type=image/png href=https://ar.falsy.cat//icon.png><link href=https://ar.falsy.cat/styles.80333fa2099c0bee674efa435fde378c.min.css rel=stylesheet><link href=https://ar.falsy.cat/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><script src=https://ar.falsy.cat/js/darkmode.557cde7fcc3511a3d7ca8545ecd46d77.min.js></script>
<script src=https://ar.falsy.cat/js/util.00639692264b21bc3ee219733d38a8be.min.js></script>
<link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
<script src=https://cdn.jsdelivr.net/npm/@floating-ui/core@1.2.1></script>
<script src=https://cdn.jsdelivr.net/npm/@floating-ui/dom@1.2.1></script>
<script defer src=https://ar.falsy.cat/js/popover.0094f98610bd792200f053b9a02426a4.min.js></script>
<script defer src=https://ar.falsy.cat/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
<script defer src=https://ar.falsy.cat/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
<script defer src=https://ar.falsy.cat/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://ar.falsy.cat/",fetchData=Promise.all([fetch("https://ar.falsy.cat/indices/linkIndex.1536ace533d46c5e6ba5603af477ff2f.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://ar.falsy.cat/indices/contentIndex.c24a5742b7be2d0324b4d0d383e2330a.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,s=t==n;addCopyButtons(),addTitleToCodeBlocks(),addCollapsibleCallouts(),initPopover("https://ar.falsy.cat",!0);const o=document.getElementById("footer");if(o){const e=document.getElementById("graph-container");if(!e)return requestAnimationFrame(render);e.textContent="";const t=s&&!0;drawGraph("https://ar.falsy.cat",t,[{"/moc":"#4388cc"}],t?{centerForce:1,depth:-1,enableDrag:!0,enableLegend:!1,enableZoom:!0,fontSize:.5,linkDistance:1,opacityScale:3,repelForce:1,scale:1.4}:{centerForce:1,depth:1,enableDrag:!0,enableLegend:!1,enableZoom:!0,fontSize:.6,linkDistance:1,opacityScale:3,repelForce:2,scale:1.2})}var i=document.getElementsByClassName("mermaid");i.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()});function a(n){const e=n.target,t=e.className.split(" "),s=t.includes("broken"),o=t.includes("internal-link");plausible("Link Click",{props:{href:e.href,broken:s,internal:o,graph:!1}})}const r=document.querySelectorAll("a");for(link of r)link.className.includes("root-title")&&link.addEventListener("click",a,{once:!0})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{'':"'"},throwOnError:!1})}</script><script type=module>
import { attachSPARouting } from "https:\/\/ar.falsy.cat\/js\/router.d6fe6bd821db9ea97f9aeefae814d8e7.min.js"
attachSPARouting(init, render)
</script><script defer data-domain=ar.falsy.cat src=https://plausible.io/js/script.js></script>
<script>window.plausible=window.plausible||function(){(window.plausible.q=window.plausible.q||[]).push(arguments)}</script></head><body><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
<script defer src=https://ar.falsy.cat/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><div class=singlePage><header><h1 id=page-title><a class=root-title href=https://ar.falsy.cat/>ar.falsy.cat</a></h1><div class=spacer></div><div id=search-icon><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><article><h1>dart言語</h1><p class=meta>Last updated
Jun 21, 2023</p><ul class=tags><li><a href=https://ar.falsy.cat/tags/note/>Note</a></li><li><a href=https://ar.falsy.cat/tags/info-tech/>Info tech</a></li><li><a href=https://ar.falsy.cat/tags/development/>Development</a></li><li><a href=https://ar.falsy.cat/tags/programming-language/>Programming language</a></li></ul><aside class=mainTOC><details><summary>Table of Contents</summary><nav id=TableOfContents><ol><li><a href=#概要>概要</a></li><li><a href=#特徴>特徴</a></li><li><a href=#文法>文法</a><ol><li><a href=#変数修飾子>変数修飾子</a></li><li><a href=#null-safety>Null safety</a></li><li><a href=#コンストラクタ>コンストラクタ</a></li></ol></li></ol></nav></details></aside><a href=#概要><h2 id=概要><span class=hanchor arialabel=Anchor># </span>概要</h2></a><ul><li>Google製プログラミング言語</li><li><a href=/note/info-tech/flutter/ rel=noopener class=internal-link data-src=/note/info-tech/flutter/>flutter</a>のための言語</li><li>日本語資料少なめ</li><li>オブジェクト指向</li></ul><a href=#特徴><h2 id=特徴><span class=hanchor arialabel=Anchor># </span>特徴</h2></a><ul><li>undefined behaviorは無い</li><li>Null safety<ul><li>型名に?を付ければNull許容型になる</li><li>Null許容型に対してはNullチェックをしないとコンパイラがキレる</li></ul></li><li>整数値以外は参照型</li><li>GCmark & sweep搭載<ul><li>デストラクタは無さそうそもそもmark & sweepでデストラクタは信頼できない</li></ul></li><li>コンストラクタが書きやすい<ul><li>わざわざメンバ変数と同じ名前の引数を書いて,代入して,,,ということをしなくてもいい</li></ul></li><li>静的解析が強め</li></ul><a href=#文法><h2 id=文法><span class=hanchor arialabel=Anchor># </span>文法</h2></a><ul><li>大体は既存のやつと同じ</li><li>文末セミコロン必須</li><li>関数呼び出しの実引数リストでもケツカンマ許容</li></ul><a href=#変数修飾子><h3 id=変数修飾子><span class=hanchor arialabel=Anchor># </span>変数修飾子</h3></a><ul><li>型が自明な場合,型名は省略できる<ul><li>省略できる場合は省略することが推奨される</li></ul></li></ul><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt> 1
</span><span class=lnt> 2
</span><span class=lnt> 3
</span><span class=lnt> 4
</span><span class=lnt> 5
</span><span class=lnt> 6
</span><span class=lnt> 7
</span><span class=lnt> 8
</span><span class=lnt> 9
</span><span class=lnt>10
</span><span class=lnt>11
</span><span class=lnt>12
</span><span class=lnt>13
</span><span class=lnt>14
</span><span class=lnt>15
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-dart data-lang=dart><span class=line><span class=cl><span class=c1>// コンパイル時定数
</span></span></span><span class=line><span class=cl><span class=c1></span><span class=kd>const</span> <span class=kt>int</span> <span class=n>x</span> <span class=o>=</span> <span class=m>0</span><span class=p>;</span>
</span></span><span class=line><span class=cl><span class=kd>const</span> <span class=n>x</span> <span class=o>=</span> <span class=m>0</span><span class=p>;</span>
</span></span><span class=line><span class=cl>
</span></span><span class=line><span class=cl><span class=c1>// 再代入不可能変数
</span></span></span><span class=line><span class=cl><span class=c1></span><span class=kd>final</span> <span class=kt>int</span> <span class=n>x</span> <span class=o>=</span> <span class=m>0</span><span class=p>;</span>
</span></span><span class=line><span class=cl><span class=kd>final</span> <span class=n>x</span> <span class=o>=</span> <span class=m>0</span><span class=p>;</span>
</span></span><span class=line><span class=cl>
</span></span><span class=line><span class=cl><span class=c1>// 再代入可能変数
</span></span></span><span class=line><span class=cl><span class=c1></span><span class=kd>var</span> <span class=kt>int</span> <span class=n>x</span> <span class=o>=</span> <span class=m>0</span><span class=p>;</span>
</span></span><span class=line><span class=cl><span class=kd>var</span> <span class=n>x</span> <span class=o>=</span> <span class=m>0</span><span class=p>;</span>
</span></span><span class=line><span class=cl>
</span></span><span class=line><span class=cl><span class=c1>// 遅延初期化変数
</span></span></span><span class=line><span class=cl><span class=c1></span><span class=n>late</span> <span class=kt>int</span> <span class=n>x</span><span class=p>;</span>
</span></span><span class=line><span class=cl><span class=n>late</span> <span class=kd>final</span> <span class=kt>int</span> <span class=n>x</span><span class=p>;</span>
</span></span></code></pre></td></tr></table></div></div><a href=#final-再代入不可能変数><h4 id=final-再代入不可能変数><span class=hanchor arialabel=Anchor># </span>final: 再代入不可能変数</h4></a><ul><li>値型の変数に対しては,値の変更を禁止する</li><li>参照型の変数に対しては,参照先の変更のみを禁止する</li><li>dartでは参照先のオブジェクトの変更を禁止することはできない</li></ul><a href=#late-遅延初期化><h4 id=late-遅延初期化><span class=hanchor arialabel=Anchor># </span>late: 遅延初期化</h4></a><ul><li>変数の初期化を遅延させることができる</li><li>実質的にはNull safetyの無いNull許容型</li><li><code>late final</code>修飾子によって複数回の代入をコンパイルエラーにできる<ul><li>ただし静的解析の精度は微妙なので絶対に2回目の代入ができなくなるわけではない</li></ul></li></ul><a href=#null-safety><h3 id=null-safety><span class=hanchor arialabel=Anchor># </span>Null safety</h3></a><ul><li>Null許容型に対してはNullを扱いやすくするための演算子が使える</li><li>関数の中で変数に対して一度nullチェックをした場合以降その変数はNull許容型でないものとして扱える</li></ul><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt> 1
</span><span class=lnt> 2
</span><span class=lnt> 3
</span><span class=lnt> 4
</span><span class=lnt> 5
</span><span class=lnt> 6
</span><span class=lnt> 7
</span><span class=lnt> 8
</span><span class=lnt> 9
</span><span class=lnt>10
</span><span class=lnt>11
</span><span class=lnt>12
</span><span class=lnt>13
</span><span class=lnt>14
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-dart data-lang=dart><span class=line><span class=cl><span class=p>(</span><span class=n>T</span><span class=o>?</span> <span class=n>x</span><span class=p>)</span> <span class=p>{</span>
</span></span><span class=line><span class=cl> <span class=n>x</span> <span class=o>??</span> <span class=n>T</span><span class=p>();</span> <span class=c1>// x が null ならば 0 それ以外ならば T()
</span></span></span><span class=line><span class=cl><span class=c1></span> <span class=n>x</span><span class=o>?</span><span class=p>.</span><span class=n>method</span><span class=p>();</span> <span class=c1>// x が null ならば methodを呼ばずnullを返す それ以外ならば methodを呼ぶ
</span></span></span><span class=line><span class=cl><span class=c1></span> <span class=n>x</span><span class=o>!</span><span class=p>.</span><span class=n>method</span><span class=p>();</span> <span class=c1>// x が nullでない ことを前提として methodを呼ぶ実行時にnullだった場合runtime error
</span></span></span><span class=line><span class=cl><span class=c1></span><span class=p>};</span>
</span></span><span class=line><span class=cl><span class=p>(</span><span class=n>T</span><span class=o>?</span> <span class=n>x</span><span class=p>)</span> <span class=p>{</span>
</span></span><span class=line><span class=cl> <span class=k>if</span> <span class=p>(</span><span class=n>x</span> <span class=o>==</span> <span class=kc>null</span><span class=p>)</span> <span class=p>{</span>
</span></span><span class=line><span class=cl> <span class=k>return</span><span class=p>;</span>
</span></span><span class=line><span class=cl> <span class=p>}</span>
</span></span><span class=line><span class=cl> <span class=n>x</span><span class=p>.</span><span class=n>method</span><span class=p>();</span> <span class=c1>// x!.method(); とする必要がない
</span></span></span><span class=line><span class=cl><span class=c1></span><span class=p>};</span>
</span></span><span class=line><span class=cl><span class=p>(</span><span class=n>T</span><span class=o>?</span> <span class=n>x</span><span class=p>)</span> <span class=p>{</span>
</span></span><span class=line><span class=cl> <span class=n>x</span><span class=p>.</span><span class=n>method</span><span class=p>();</span> <span class=c1>// Nullチェックしてないのでコンパイルエラー
</span></span></span><span class=line><span class=cl><span class=c1></span><span class=p>};</span>
</span></span></code></pre></td></tr></table></div></div><a href=#コンストラクタ><h3 id=コンストラクタ><span class=hanchor arialabel=Anchor># </span>コンストラクタ</h3></a><ul><li>C++と比べてかなり書きやすい</li></ul><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt> 1
</span><span class=lnt> 2
</span><span class=lnt> 3
</span><span class=lnt> 4
</span><span class=lnt> 5
</span><span class=lnt> 6
</span><span class=lnt> 7
</span><span class=lnt> 8
</span><span class=lnt> 9
</span><span class=lnt>10
</span><span class=lnt>11
</span><span class=lnt>12
</span><span class=lnt>13
</span><span class=lnt>14
</span><span class=lnt>15
</span><span class=lnt>16
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-dart data-lang=dart><span class=line><span class=cl><span class=kd>class</span> <span class=nc>A</span> <span class=p>{</span>
</span></span><span class=line><span class=cl> <span class=kd>final</span> <span class=kt>int</span> <span class=n>x</span><span class=p>;</span>
</span></span><span class=line><span class=cl> <span class=kd>final</span> <span class=kt>int</span> <span class=n>y</span><span class=p>;</span>
</span></span><span class=line><span class=cl> <span class=kd>final</span> <span class=kt>int</span> <span class=n>z</span><span class=p>;</span>
</span></span><span class=line><span class=cl>
</span></span><span class=line><span class=cl> <span class=n>A</span><span class=p>(</span><span class=k>this</span><span class=p>.</span><span class=n>x</span><span class=p>,</span> <span class=k>this</span><span class=p>.</span><span class=n>y</span><span class=p>,</span> <span class=k>this</span><span class=p>.</span><span class=n>z</span><span class=p>);</span>
</span></span><span class=line><span class=cl> <span class=n>A</span><span class=p>(</span><span class=k>this</span><span class=p>.</span><span class=n>x</span><span class=p>,</span> <span class=p>{</span><span class=n>required</span> <span class=k>this</span><span class=p>.</span><span class=n>y</span><span class=p>,</span> <span class=k>this</span><span class=p>.</span><span class=n>z</span> <span class=o>=</span> <span class=m>1</span><span class=p>});</span>
</span></span><span class=line><span class=cl> <span class=n>A</span><span class=p>.</span><span class=n>empty</span><span class=p>()</span> <span class=o>:</span>
</span></span><span class=line><span class=cl> <span class=k>this</span><span class=p>.</span><span class=n>x</span> <span class=o>=</span> <span class=m>0</span><span class=p>,</span> <span class=k>this</span><span class=p>.</span><span class=n>y</span> <span class=o>=</span> <span class=m>0</span><span class=p>,</span> <span class=k>this</span><span class=p>.</span><span class=n>z</span> <span class=o>=</span> <span class=m>0</span><span class=p>;</span>
</span></span><span class=line><span class=cl><span class=p>}</span>
</span></span><span class=line><span class=cl>
</span></span><span class=line><span class=cl><span class=kt>void</span> <span class=n>main</span><span class=p>()</span> <span class=p>{</span>
</span></span><span class=line><span class=cl> <span class=kd>final</span> <span class=n>a1</span> <span class=o>=</span> <span class=n>A</span><span class=p>(</span><span class=m>0</span><span class=p>,</span> <span class=m>1</span><span class=p>,</span> <span class=m>2</span><span class=p>);</span>
</span></span><span class=line><span class=cl> <span class=kd>final</span> <span class=n>a2</span> <span class=o>=</span> <span class=n>A</span><span class=p>(</span><span class=m>0</span><span class=p>,</span> <span class=nl>y:</span> <span class=m>1</span><span class=p>);</span>
</span></span><span class=line><span class=cl> <span class=kd>final</span> <span class=n>a3</span> <span class=o>=</span> <span class=n>A</span><span class=p>.</span><span class=n>empty</span><span class=p>();</span>
</span></span><span class=line><span class=cl><span class=p>}</span>
</span></span></code></pre></td></tr></table></div></div><div class=content-list><h2>Related Notes</h2><ul class=section-ul><li class=section-li><div class=section><p class=meta>Jun 21, 2023</p><div class=desc><h3><a href=https://ar.falsy.cat/note/info-tech/c-cpp-sanitizer/ class=internal-link data-src=/note/info-tech/c-cpp-sanitizer/>C/C++のsanitizerの使い方</a></h3></div><div class=spacer></div><ul class=tags><li><a href=https://ar.falsy.cat/tags/note/>Note</a></li><li><a href=https://ar.falsy.cat/tags/info-tech/>Info-Tech</a></li><li><a href=https://ar.falsy.cat/tags/development/>Development</a></li><li><a href=https://ar.falsy.cat/tags/programming-language/>Programming-Language</a></li><li><a href=https://ar.falsy.cat/tags/howto/>Howto</a></li></ul></div></li><li class=section-li><div class=section><p class=meta>Jun 29, 2023</p><div class=desc><h3><a href=https://ar.falsy.cat/note/info-tech/install-flutter-on-archlinux/ class=internal-link data-src=/note/info-tech/install-flutter-on-archlinux/>ArchLinuxへflutterをインストール</a></h3></div><div class=spacer></div><ul class=tags><li><a href=https://ar.falsy.cat/tags/note/>Note</a></li><li><a href=https://ar.falsy.cat/tags/info-tech/>Info-Tech</a></li><li><a href=https://ar.falsy.cat/tags/development/>Development</a></li><li><a href=https://ar.falsy.cat/tags/howto/>Howto</a></li></ul></div></li><li class=section-li><div class=section><p class=meta>Jun 29, 2023</p><div class=desc><h3><a href=https://ar.falsy.cat/note/info-tech/flutter/ class=internal-link data-src=/note/info-tech/flutter/>flutter</a></h3></div><div class=spacer></div><ul class=tags><li><a href=https://ar.falsy.cat/tags/note/>Note</a></li><li><a href=https://ar.falsy.cat/tags/info-tech/>Info-Tech</a></li><li><a href=https://ar.falsy.cat/tags/development/>Development</a></li><li><a href=https://ar.falsy.cat/tags/library/>Library</a></li></ul></div></li></ul></div></article><hr><div class=page-end id=footer><div class=backlinks-container><h3>Backlinks</h3><ul class=backlinks><li><a href=/note/info-tech/flutter/ data-ctx=Dart data-src=/note/info-tech/flutter class=internal-link>flutter</a></li></ul></div><div><script src=https://cdn.jsdelivr.net/npm/d3@6.7.0/dist/d3.min.js integrity="sha256-+7jaYCp29O1JusNWHaYtgUn6EhuP0VaFuswhNV06MyI=" crossorigin=anonymous></script><h3>Interactive Graph</h3><div id=graph-container></div><style>:root{--g-node:var(--secondary);--g-node-active:var(--primary);--g-node-inactive:var(--visited);--g-link:var(--outlinegray);--g-link-active:#5a7282}</style><script src=https://ar.falsy.cat/js/graph.6579af7b10c818dbd2ca038702db0224.js></script></div></div><div id=contact_buttons><footer><p>Made by falsycat using <a href=https://github.com/jackyzha0/quartz>Quartz</a>, © 2023</p><ul><li><a href=https://ar.falsy.cat/>Home</a></li><li><a href=https://falsy.cat/>Portfolio</a></li><li><a href=https://falsy.cat/admin>Fediverse</a></li><li><a href=https://github.com/falsycat>GitHub</a></li><li><a href=https://youtube.com/@falsycat>YouTube</a></li></ul></footer></div></div></body></html>