Effective Go 翻訳 ~ Control structures ①

  • URLをコピーしました!
目次

はじめに

英語の勉強でリーディングを始めました。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 do or while loop, only a slightly generalized forswitch is more flexible; if and switch accept an optional initialization statement like that of forbreak and continue 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.

https://golang.org/doc/effective_go#control-structures

Goの制御構造はCの制御構造と関連していますが、重要な点において異なります。dowhileループは無く、わずかに一般化されたforのみです。switchはよりフレキシブルです。ifswitchforのようなオプションの初期化文を受け入れます。breakcontinue文は何を中断または継続するかを識別するためのオプションのラベルを受け取ります。そして、type switchと多方向通信多重化装置であるselectを含む新しい制御構造があります。構文もわずかに異なり、丸括弧は無く、ボディは常に中括弧で区切られなければなりません。

If

In Go a simple if looks like this:

https://golang.org/doc/effective_go#control-structures

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 a return or break.

Since if and switch accept an initialization statement, it’s common to see one used to set up a local variable.

https://golang.org/doc/effective_go#control-structures

必須の中括弧は単純なif文を複数行に記述することを促進します。特にreturnbreakのような制御文を含む場合、そのようにすることが良いスタイルです。ifswitchは初期化文を受け入れるため、ローカル変数をセットアップするために使用されることがよくあります。

if err := file.Chmod(0664); err != nil {
    log.Print(err)
    return err
}

In the Go libraries, you’ll find that when an if statement doesn’t flow into the next statement—that is, the body ends in breakcontinuegoto, or return—the unnecessary else is omitted.

https://golang.org/doc/effective_go#control-structures

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 return statements, the resulting code needs no else statements.

https://golang.org/doc/effective_go#control-structures

これはコードが一連のエラー条件に対してガードしなければならない共通な状況の例です。もし制御フローが正常に実行された場合、エラーが発生したケースを除いて、コードは適切に読み取られます。エラーケースは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 := short declaration form works. The declaration that calls os.Open reads,

https://golang.org/doc/effective_go#control-structures

さておき、前節の最後の例はショート宣言形式:=がどのように動作するかの詳細を実証します。os.Openを呼びだす宣言が読み取れます。

f, err := os.Open(name)

This statement declares two variables, f and err. A few lines later, the call to f.Stat reads,

https://golang.org/doc/effective_go#control-structures

この文章はferrの二つの変数を宣言します。数行後、f.Statの呼び出しが読み取れます。

d, err := f.Stat()

which looks as if it declares d and err. Notice, though, that err 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 to f.Stat uses the existing err variable declared above, and just gives it a new value.

https://golang.org/doc/effective_go#control-structures

これはderrを宣言しているように見えます。しかし、errが両方の文に表れていることに注目してください。この複製は合法です。errは最初の文で宣言されますが、第二の文で再割り当てされます。これはf.Statの呼び出しは、上で宣言された既存のerr変数を使用し、それに新しい値を与えていることを意味します。

In a := declaration a variable v may appear even if it has already been declared, provided:

・this declaration is in the same scope as the existing declaration of v (if v 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 long if-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 CGoの制御構造はCのそれらと関連があります。
Stress is related to poor sleep.ストレスは睡眠不足と関係があります。

differ in ~(〜[の点で]異なる)

The control structures of Go are related to those of C but differ in important waysGoの制御構造は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・一致する、対応する

Effective Go 他セクションの翻訳

参考

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次