「Go/キーワードと宣言済み識別子」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
init.
タグ: 2017年版ソースエディター
 
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
138 行
 
=== 組込み関数 ===
込み関数はあらかじめ宣言されています。これらは他の関数と同様に呼び出されますが、中には最初の引数として式ではなく型を受け取るものもあります<ref name="Built-in_functions"/>。
込み関数は、Goの標準的な型を持たないので、呼び出し式の中でのみ登場し、関数の値としては使えません。
 
==== close ====
156 行
 
==== 長さと容量 ====
込み関数 '''len''' と '''cap''' は、様々な型の引数を取り、int型の結果を返します。実装では、結果が常にint型に収まることが保証されています<ref name="Length_and_capacity">{{cite book
| url = https://golang.org/ref/spec#Length_and_capacity
| title = The Go Programming Language Specification
166 行
{| class=wikitable
|+ 長さと容量
! 呼び出し !!引数の型 !! 戻り値
|-
|rowspan=5|len(s) || string type || 文字列の長さ(バイト)
| string type
| 文字列の長さ(バイト)
|-
| [n]T, *[n]T || 配列の長さ (== n)
| 配列の長さ (== n)
|-
| []T || スライスの長さ
| スライスの長さ
|-
| map[K]T || mapの長さ (定義されたキーの数)
| mapの長さ (定義されたキーの数)
|-
| chan T || チャンネルバッファにキューイングされている要素の数
| chan T
| チャンネルバッファにキューイングされている要素の数
|-
|rowspan=3| cap(s) || [n]T, *[n]T || 配列の長さ (== n)
| [n]T, *[n]T
| 配列の長さ (== n)
|-
| []T || スライスの容量
| スライスの容量
|-
| chan T || チャンネルバッファの容量
| チャンネルバッファの容量
|}
スライスの容量は、基礎となる配列に割り当てられたスペースがある要素の数です。いつでも以下の関係が成り立ちます。
201 ⟶ 191行目:
 
==== 割当て ====
込み関数newは,型Tを受け取り,実行時にその型の変数のためのストレージを確保し,その変数を指す*T型の値を返します。この変数は,[[#初期値|初期値]]の項で説明したように初期化されます<ref name="Allocation">{{cite book
| url = https://golang.org/ref/spec#Allocation
| title = The Go Programming Language Specification
215 ⟶ 205行目:
 
==== スライス、マップ、チャンネルの作成 ====
込み関数'''make'''は,スライス型,マップ型,チャネル型でなければならないT型を受け取り,任意で型固有の式のリストを続けます。
この関数は,T型の値を返します(*Tではありません)。
メモリは,初期値の項で述べたように初期化されます。<ref name="Making_slices_maps_and_channels">{{cite book
224 ⟶ 214行目:
| publisher = The Go website
}}</ref>。
{| class=wikitable
|+ スライス、マップ、チャンネルの作成
!呼び出し!!引数の型T!!戻り値
|-
| make(T, n) || slice || 長さn、容量nのタイプTのスライス
|-
| make(T, n, m) || slice || 長さn、容量mのタイプTのスライス
|-
| make(T) || map || 型Tのマップ
|-
| make(T, n) || map || 約n個の要素の初期空間を持つ型Tのマップ
|-
| make(T) || channel || 型Tのバッファなしチャネル
|-
| make(T, n) || channel || 型Tのバッファサイズnのバッファ付きチャネル、
|}
サイズ引数nとmは、それぞれ整数型または型付けされていない定数でなければなりません。定数のサイズ引数は非負で、int型の値で表されなければなりません。型付けされていない定数の場合、int型が与えられます。nとmの両方が提供され、かつ定数である場合、nはmより大きくてはなりません。実行時にnが負またはmより大きい場合、実行時パニックが発生します。
 
==== スライスの追加とコピー ====
組込み関数'''append'''と'''copy'''は、一般的なスライス操作を支援します。どちらの関数も、引数で参照されるメモリが重なっているかどうかに関係なく、結果が得られます<ref name="Appending_and_copying_slices">{{cite book
<ref name="Appending_and_copying_slices">{{cite book
| url = https://golang.org/ref/spec#Appending_and_copying_slices
| title = The Go Programming Language Specification
232 ⟶ 239行目:
| date = Jul 26, 2021
| publisher = The Go website
}}</ref>
 
可変長引数(''variadic'')な関数appendは、0個以上の値xをスライス型でなければならないS型のsに追加し、結果としてS型のスライスを返します。値xは、TがSの要素型である...T型のパラメータに渡され、それぞれのパラメータ通過規則が適用されます。特殊なケースとして、appendは、[]byte型に割り当てられる第1引数と、... に続く文字列型の第2引数も受け入れます。この形式では、文字列のバイトを追加します。
append(s S, x ...T) S // T は S の要素の型
sの容量が追加の値を収めるのに十分な大きさでない場合、appendは既存のスライス要素と追加の値の両方を収めることができる、十分に大きい新しい基本配列を割り当てます。そうでなければ、appendは基礎となる配列を再利用します。
 
==== マップ要素の削除 ====
組込み関数 ''delete'' は,キーkを持つ要素をマップmから削除します。kの型はmのキーの型に割り当て可能でなければなりません<ref name="Deletion_of_map_elements">{{cite book
| url = https://golang.org/ref/spec#Deletion_of_map_elements
| title = The Go Programming Language Specification
241 ⟶ 252行目:
| date = Jul 26, 2021
| publisher = The Go website
}}</ref>
delete(m, k) // マップmから要素m[k]を削除
マップmがnilであったり、要素m[k]が存在しない場合、deleteはno-opとなります。
 
==== 複素数の操作 ====
3つの関数が複素数を組み立てたり分解したりします。組込み関数 ''complex'' は,浮動小数点の実部と虚部から複素数値を構成し,''real'' と ''imag'' は複素数値の実部と虚部を抽出します<ref name="Complex_numbers">{{cite book
<ref name="Complex_numbers">{{cite book
| url = https://golang.org/ref/spec#Complex_numbers
| title = The Go Programming Language Specification
250 ⟶ 263行目:
| date = Jul 26, 2021
| publisher = The Go website
}}</ref>
complex(realPart, imaginaryPart floatT) complexT
real(complexT) floatT
imag(complexT) floatT
引数の型と戻り値の型が対応しています。complexの場合、2つの引数は同じ浮動小数点型でなければならず、戻り値の型は、対応する浮動小数点構成要素を持つ複素数型です:float32の引数にはcomplex64、float64の引数にはcomplex128です。引数の1つが型付けされていない定数として評価される場合、それは最初に他の引数の型に暗黙的に変換されます。両方の引数が型付けされていない定数として評価される場合、それらは非複素数でなければならず、あるいはそれらの虚数部はゼロでなければならず、関数の戻り値は型付けされていない複素数定数となります。
 
realとimagの場合、引数は複素数型でなければならず、戻り値の型は対応する浮動小数点型です:complex64の引数にはfloat32、complex128の引数にはfloat64です。引数が型付けされていない定数として評価される場合、それは数値でなければならず、関数の戻り値は型付けされていない浮動小数点定数となります。
 
real関数とimag関数は対でcomplexの逆数を構成するので、複素数型Zの値zに対しては、z == Z(complex(real(z), imag(z)))となります。
 
==== パニックへの対応 ====
'''panic''' と '''recover''' という2つの組込み関数は、ランタイムパニックやプログラム定義のエラー状態の報告と処理を支援します<ref name="Handling_panics">{{cite book
<ref name="Handling_panics">{{cite book
| url = https://golang.org/ref/spec#Handling_panics
| title = The Go Programming Language Specification
259 ⟶ 280行目:
| date = Jul 26, 2021
| publisher = The Go website
}}</ref>
 
==== ブートストラップ ====
現在の実装では、ブートストラップの際に便利ないくつかの組み込み関数が用意されています。これらの関数は完成度を高めるために文書化されていますが、言語として残ることは保証されていません。これらの関数は結果を返しません<ref name="Bootstrapping">{{cite book
<ref name="Bootstrapping">{{cite book
| url = https://golang.org/ref/spec#Bootstrapping
| title = The Go Programming Language Specification
268 ⟶ 289行目:
| date = Jul 26, 2021
| publisher = The Go website
}}</ref>
{| class=wikitable
|+ ブートストラップ
!関数!!動作
|-
| print || すべての引数を表示します。引数のフォーマットは実装によって異なります。
|-
| println || printと同じですが、引数の間にスペースを入れ、最後に改行を入れます。
|}
 
== 脚註 ==