Go はなぜ iota 定数を設計したのでしょうか?

リリース: 2023-08-04 17:34:20
転載
1341 人が閲覧しました

Go 言語には非常にユニークなものがあり、それが iota 定数です。不完全な統計によると、多くの Go 開発者が PHP、Java、C、Python などから移行しており、これについては非常に興味深いです。

今日は皆さんと一緒に深く学びましょう。

Go 構文

Go では、列挙定数は iota 列挙子を使用して作成されます。機能的には、iota キーワードは 0 から始まる整数定数を表します。関数では、次のように指定できます。自動的に増加する数値を使用して定数の定義を簡素化します。これは非常に便利です。

以前に列挙値を定義しました:

const (
    a = 0
    b = 1
    c = 2
)
ログイン後にコピー

Go に iota キーワードが追加された後:

const (
    a = iota
    b
    c
)
ログイン後にコピー

対応する値の結果:

a=0
b=1
c=2
ログイン後にコピー

は OK です ジャンプ:

const (
 a = iota
 _
 b
 c
)
ログイン後にコピー

対応する値の結果:

a=0
b=2
c=3
ログイン後にコピー

花で遊ぶこともできます:

const (
 bit0, mask0 = 1 << iota, 1<<iota - 1
 bit1, mask1                           
 _, _                                  
 bit3, mask3                          
)
ログイン後にコピー

対応する値の結果:

bit0 == 1, mask0 == 0  (iota == 0)
bit1 == 2, mask1 == 1  (iota == 1)
                       (iota == 2, unused)
bit3 == 8, mask3 == 7  (iota == 3)
ログイン後にコピー

デザイン思考

イオタについてある程度の基本を理解した後、私たちはテーマに入り、魚のフライで好奇心を広げ始めました。

  • なぜ iota と呼ばれるのですか?何かの略語ですか?
  • なぜ iota が必要なのでしょうか?

なぜ iota と呼ばれるのか

実際、iota は完全名です。stackoverflow で質問してください [1] は、多くのコミュニティの友人によって議論されています (予想どおり、好奇心旺盛な友人がかなりいます)。

本質的に「iota」はギリシャ語アルファベットの9番目の文字です。これは、非常に小さなものを表す典型的な数学記号です。

Go はなぜ iota 定数を設計したのでしょうか?

は、次のシナリオでよく使用されます:

  • 作为和与算法中的迭代器。
  • 作为下标索引。
  • 用于复数的虚数部分。

除了 Go 以外,在 APL、C++,又或是 Scheme 均有有 iota 常量的存在(设计),可以给到大家使用。

Scheme iota 的签名如下:

iota count [start step]
ログイン後にコピー

作用是返回一个包含计数数字的列表,从起始点开始,每次增加步长。默认的开始是0,默认的步骤是 1。

例如:

(iota 6)        ⇒ (0 1 2 3 4 5)
(iota 4 2.5 -2) ⇒ (2.5 0.5 -1.5 -3.5)
ログイン後にコピー

其实 iota 已经是迭代器的一个约定式命名了,可以认为是也业内通识。

为什么需要有

在《The Go Programming Language Specification[2]》中存在着对 iota 的明确定义和说明。

如下:

Go はなぜ iota 定数を設計したのでしょうか?

在一个常量声明中,预先声明的标识符 iota 代表连续的无类型的整数常量。它的值是该常量声明中各 ConstSpec 的索引,从0开始。

提取核心意义:Go 中的 iota 是 ConstSpec 索引,也就是填补的是连续的无类型整数常量的位置。

因此 Go 中有它的一席位置。

总结

在这篇文章中,我们介绍了 Go 中 iota 的基本语法。同时基于历史资料针对 iota 到底是什么,为什么要这么叫,又有什么用进行了一番研究。

也需要思考另外一个问题,并不是每一门语言都有 iota。那没有 iota 的话会怎么样,不存在是否也有其合理性呢?

以上がGo はなぜ iota 定数を設計したのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:Golang菜鸟
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート