このタグの記事
Ruby
RubyWorld Conference 2024に参加してきました!!
みなさん、お久しぶりです! 前回のブログ投稿から3年くらいたっての投稿になります。田中です。 12/5〜12/6に開催されたRubyWorld Conference 2024に参加してきました。 毎年11月の開催だったので、個人的には人生初の12月の島根が楽しみでもありました(笑) 出雲空港に着いてまず思ったのは、とにかく寒い!例年に比べて尋常じゃなく寒かったです。 来年以降のRubyWorld Conferenceへ参加する人達は、**「12月なら厚着」**を徹底してください! 11月の感覚で足を踏み入れた私は、この日から2日間ずっと寒い思いをします。 と、冒頭の話はここらへんにしてRubyWorld Conferenceの話をしたいと思います。 今年のカンファレンスは、Andy Piperさんの基調講演から始まりました。 内容としては、分散型ソーシャルウェブの重要性やどの様に成長してきたか等のお話をしてくださいました。 普段、使うことはしても重要性等は気にしたことがなかった私としては驚きの多いお話でした。 午前中の公演が終わり、WYRD恒例のお蕎麦を食べに行きました。 今年は神代そばへ行きました。 毎年お邪魔しているのですが、個人的にはイチオシなお店なので是非食べに行ってください! (写真撮り忘れたごめんなさい!!!!!!!!) 午後は、出店ブースなどを見たり公演を聴いたり充実したお時間を過ごさせていただきました。 公演に興味がある方は、RubyWorld Conference 2024チャンネルでアーカイブを見てください。 翻訳も用意されているので、英語が苦手な方でも安心して楽しめます。 自分も英語で内容がわからなかった場合は、このチャンネルで聴き直したりしています。 (本当に助かります...感謝) レセプションでは、色々な会社の方と挨拶させていただいたり美味しいお酒を頂きました。 まつもとゆきひろさんともお写真撮らせていただいたり、素敵な時間を過ごしました。 サムネイルに使用している写真もレセプションで撮らせていただきました! しまねっこの登場で会場がさらに和やかな雰囲気になり、みんな笑顔になっていました。 しまねっこはいつ見てもかわいい こんな感じで今年もRubyWorld Conferenceとても素敵なイベントでした! 運営に携わってくださった皆様、本当にお疲れ様でした。 余談 これもせっかくなので書くかという話題なのですが、人生初神有月ではない出雲大社に参拝してきました。 私がそもそも神社に詳しくはないのですが、ここまで大きい神社って出雲大社くらいしか行ったことがないので何回来ても圧倒されます。 毎年のノルマとして良縁を祈り続けているので、今年も達成できてよかったです(笑) あとすごく美味しい松葉蟹をいただきました。 こんな贅沢をして良いのか、って毎年思います。 この感動を与えてくれた松江と、松葉蟹に心から感謝です。Matzさんにも感謝を込めて。
動的型付け言語と静的型付け言語を理解してみる
年末までに10kgダイエットと言いながら、8kgで目標未達になってしまった冨田です。 今回のテーマについて深く学習をしてこなかったので、何が違うのかを改めて調べてみました。(TypeScriptに何故か苦手意識があり、避けてきたので...) 静的型付け言語: MDN Static typing 静的型付け言語(例えば、Java, C, C++)とは、コンパイル時に変数の型がわかる言語です。静的型付け言語の多くは、プログラマが明示的に型を指定 動的型付け言語: MDN Dynamic typing 動的型付け言語とは、(JavaScript のように) インタプリターが実行時に、変数の値 に基づいて、変数 にデータ型 を割り当てる ※インタプリター型言語とコンパイラー型言語で動的・静的型付け言語を判断しているわけではないので注意! メリットとデメリット 詳細な部分までは、触れない。 エラーのタイミング 動的型付け言語の場合、実行時。 静的型付け言語の場合は、コンパイル時(意味解析の型検証時)。 コード量 動的型付け言語の場合は、少ない。 静的型付け言語の場合は、多い。 コンパイルなどの機械語の部分は、省略する。(機械語部分の詳細は、これから勉強していきます!) RubyとTypeScriptをつかって、同じコードを書いてみる。 TypeScript 明示的にどの型が必要なのかを定義する。(number型しか入りませんよ〜) class Calculator { add(x: number, y: number): number { return x + y; } } ※実行する際は、下記の流れで実行する。(node.jsとTypeScriptコンパイラが必要です) //コンパイル中にエラーがない場合、jsファイルが生成される // --noEmitOnError がないと、エラーがあっても生成されます $ tsc --noEmitOnError ファイル名.ts // 対象ファイルを実行する $ node ファイル名.js 正しい型の引数を渡した場合 下記のように、計算結果を出力する const calculator = new Calculator(); const result: number = calculator.add(3, 5); console.log(result); // 8 定義した型と異なる型を引数に渡した場合 const calculator = new Calculator(); const result: number = calculator.add("aaa", 5); console.log(result); JSへコンパイルするときにエラーが発生し、JSファイルを生成しない。 $ tsc typescript.ts typescript.ts:8:39 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. const result: number = calculator.add('aaa', 5); number型に定義したパラメータにstring型の引数を割り当てられないというエラーを、プログラム実行前のコンパイル時に出力する。 Ruby 暗黙的に型を引数に定義することになる。(もちろんInt型ですよね?) class Calculator def add(x, y) x + y end end 正しい型の引数を渡した場合 calculator = Calculator.new result = calculator.add(3, 5) puts result # 8 異なる型を定義した場合 calculator = Calculator.new result = calculator.add('aaa', 5) puts result 実行後にエラーが出力される。(実行するまで、エラーが発生しない) ruby.rb:3:in `+': no implicit conversion of Integer into String (TypeError) x + y ^ from ruby.rb:3:in `add' from ruby.rb:8:in `<main>' まとめ どちらが良いという判断ではなく、「どちらも使い道によっては...」と要素が大きく感じました。 型注釈をコストと考えるか、投資と考えるか? サバイバルTypeScriptより 静的型付け言語 チーム開発や大規模開発向け 型情報によって、可読性が良くなる 動的型付け言語 個人開発やスピード感が求められる開発 すぐプログラムを実行できる エンジニア経験の浅い私としては、静的型付け言語のほうが、IDEでエラーやタイポに気づきやすいといった点でこっちのほうが見やすいのかな?と思った気づきとなりました。 (動的型付け言語でも検出できる機能やIDEはあるかと思いますが) 以上、最後までお付き合いいただきありがとうございました!

