はじめに
英語の勉強でリーディングを始めました。Go言語の勉強も兼ねてEffective Goを翻訳していければと思います。
自分の勉強用の翻訳なので、直訳かつ、訳に間違いがあるかもしれませんが、ご容赦いただければ幸いです。
もし間違いを見つけた方はコメントいただけると嬉しいです。
念のため、Effective GoのCopyrightを記載します。
コンテンツは Creative Commons Attribution 3.0 License、コードはBSD licenseとなっているため、適切に引用や翻訳すれば問題なさそうでした。
Effective Go 翻訳 – Effective Go 翻訳 ~ Control structures ①
The control structures of Go are related to those of C but differ in important ways. There is no
https://golang.org/doc/effective_go#control-structuresdo
orwhile
loop, only a slightly generalizedfor
;switch
is more flexible;if
andswitch
accept an optional initialization statement like that offor
;break
andcontinue
statements take an optional label to identify what to break or continue; and there are new control structures including a type switch and a multiway communications multiplexer,select
. The syntax is also slightly different: there are no parentheses and the bodies must always be brace-delimited.
Goの制御構造はCの制御構造と関連していますが、重要な点において異なります。do
やwhile
ループは無く、わずかに一般化されたfor
のみです。switch
はよりフレキシブルです。if
とswitch
はfor
のようなオプションの初期化文を受け入れます。break
とcontinue
文は何を中断または継続するかを識別するためのオプションのラベルを受け取ります。そして、type switchと多方向通信多重化装置であるselect
を含む新しい制御構造があります。構文もわずかに異なり、丸括弧は無く、ボディは常に中括弧で区切られなければなりません。
If
In Go a simple
https://golang.org/doc/effective_go#control-structuresif
looks like this:
Goで単純なif
はこのように見えます。
if x > 0 {
return y
}
Mandatory braces encourage writing simple
if
statements on multiple lines. It’s good style to do so anyway, especially when the body contains a control statement such as areturn
orbreak
.Since
https://golang.org/doc/effective_go#control-structuresif
andswitch
accept an initialization statement, it’s common to see one used to set up a local variable.
必須の中括弧は単純なif
文を複数行に記述することを促進します。特にreturn
やbreak
のような制御文を含む場合、そのようにすることが良いスタイルです。if
とswitch
は初期化文を受け入れるため、ローカル変数をセットアップするために使用されることがよくあります。
if err := file.Chmod(0664); err != nil {
log.Print(err)
return err
}
In the Go libraries, you’ll find that when an
https://golang.org/doc/effective_go#control-structuresif
statement doesn’t flow into the next statement—that is, the body ends inbreak
,continue
,goto
, orreturn
—the unnecessaryelse
is omitted.
Goのライブラリでは、if文が次の文に流れ込まない(つまり、本文がbreak
, continue
, goto
, もしくはreturn
で終わる)場合、不必要なelseは省略されます。
f, err := os.Open(name)
if err != nil {
return err
}
codeUsing(f)
This is an example of a common situation where code must guard against a sequence of error conditions. The code reads well if the successful flow of control runs down the page, eliminating error cases as they arise. Since error cases tend to end in
https://golang.org/doc/effective_go#control-structuresreturn
statements, the resulting code needs noelse
statements.
これはコードが一連のエラー条件に対してガードしなければならない共通な状況の例です。もし制御フローが正常に実行された場合、エラーが発生したケースを除いて、コードは適切に読み取られます。エラーケースはreturn
文で終了する傾向があるため、結果としてコードはelse
文を必要としません。
f, err := os.Open(name)
if err != nil {
return err
}
d, err := f.Stat()
if err != nil {
f.Close()
return err
}
codeUsing(f, d)
Redeclaration and reassignment
An aside: The last example in the previous section demonstrates a detail of how the
https://golang.org/doc/effective_go#control-structures:=
short declaration form works. The declaration that callsos.Open
reads,
さておき、前節の最後の例はショート宣言形式:=
がどのように動作するかの詳細を実証します。os.Open
を呼びだす宣言が読み取れます。
f, err := os.Open(name)
This statement declares two variables,
https://golang.org/doc/effective_go#control-structuresf
anderr
. A few lines later, the call tof.Stat
reads,
この文章はf
とerr
の二つの変数を宣言します。数行後、f.Stat
の呼び出しが読み取れます。
d, err := f.Stat()
which looks as if it declares
https://golang.org/doc/effective_go#control-structuresd
anderr
. Notice, though, thaterr
appears in both statements. This duplication is legal:err
is declared by the first statement, but only re-assigned in the second. This means that the call tof.Stat
uses the existingerr
variable declared above, and just gives it a new value.
これはd
とerr
を宣言しているように見えます。しかし、err
が両方の文に表れていることに注目してください。この複製は合法です。err
は最初の文で宣言されますが、第二の文で再割り当てされます。これはf.Stat
の呼び出しは、上で宣言された既存のerr
変数を使用し、それに新しい値を与えていることを意味します。
In a
:=
declaration a variablev
may appear even if it has already been declared, provided:・this declaration is in the same scope as the existing declaration of
v
(ifv
is already declared in an outer scope, the declaration will create a new variable §),・the corresponding value in the initialization is assignable to
v
, and・there is at least one other variable that is created by the declaration.
https://golang.org/doc/effective_go#control-structures
:=
宣言において、変数v
はたとえ既に宣言されていたとしても、以下の条件で表示させることができます。
・この宣言はvの既存の宣言と同じスコープ内にあります(もしvがスコープの外側で既に宣言されているなら、この宣言は新しい変数§を作成します。)
・初期化内の対応する値はv
へ割り当て可能であり、
・少なくとも一つ同じ宣言によって作成される他の変数があります。
This unusual property is pure pragmatism, making it easy to use a single
err
value, for example, in a longif-else
chain. You’ll see it used often.§ It’s worth noting here that in Go the scope of function parameters and return values is the same as the function body, even though they appear lexically outside the braces that enclose the body.
https://golang.org/doc/effective_go#control-structures
この普通ではない性質は純粋な実利主義であり、例えば長いif-else
連鎖で、一つのerr
変数を使いやすくしています。Goで関数パラメータと戻り値のスコープは、たとえそれらが本文を囲む中括弧の外側に表示されるとしても、関数本文と同じスコープであることは、注目する価値があります。
【自分用】文法/熟語メモ
be related to ~(〜と関係がある、〜と関連がある)
The control structures of Go are related to those of C | Goの制御構造はCのそれらと関連があります。 |
Stress is related to poor sleep. | ストレスは睡眠不足と関係があります。 |
differ in ~(〜[の点で]異なる)
The control structures of Go are related to those of C but differ in important ways | Goの制御構造はCのそれらと関連がありますが、重要な方法の点で異なります。 |
an aside(余談として)
This is just an aside. | これは余談です。 |
as if 仮定法(まるで〜かのように)
which looks as if it declares d and err. | これは、まるでdとerrを宣言しているかのように見えます。 |
My husband talks as if he were a kid. | 私の夫はまるで子供かのように話します。 |
even if 仮定(たとえ〜だとしても)
Even if she likes me, I’m not happy at all. | たとえ彼女が僕を好きだとしても、全然嬉しくない。 |
Even if I had more money and time, I wouldn’t go on vacation. | (お金と自由時間はないが)たとえあったとしても、休みは取らない。 |
even though 事実(たとえ〜だとしても、〜にも関わらず)
John went to the school even though he was sick. | ジョンは体調が悪かったにもかかわらず学校へ行った。 |
He went out, even though it was bad weather. | 天気が悪かったにも関わらず彼は外に出た。 |
It’s worth noting that ~(〜は注目に値する)
It’s worth noting that she didn’t say anything about it. | 彼女がそれについて何も言わなかったことは注目に値する。 |
【自分用】単語メモ
slightly | ・わずかに、少し ・細く、きゃしゃに |
Mandatory | ・義務的な、強制の、必須の ・命令の ・委任の、委任された |
corresponding | ・一致する、対応する |
コメント