少女Null 中西鼎/あきま <毎週土曜更新>有機物製のロボット・義人が普及し、人々が豊かな生活を送っている23世紀東京。そこに住む少年・リアハは、ある一体の義人との出会いをきっかけに、世界の秘密に巻き込まれていく… 『火遊び同盟』のコンビが描く巨弾SF!! [JC2巻発売中]
TypeScript で Haskell にあるような GADT (Generalized Algebraic Data Type) っぽいものをどう表現できるかという話. GADT を使いたくなる例 式をデータとして表現したいことありますよね. あると言ってくれ. 例えば数値と数値上の関数, そして関数適用がある式を考えます. 素朴に表現すると以下のようになるでしょう. type Expr = | { type: "num", val: number } | { type: "fun", val: Fun } | { type: "app", fun: Expr, arg: Expr }; type Fun = (x: number) => number; いちいちオブジェクトリテラルを書くのは面倒なのでコンストラクタを作っておきます. const num = (val: number)
Over the last four years, we’ve evolved Dart into a fast, portable, and modern language. Our next release, Dart 3, completes the journey to a fully sound null safe language. As the last step of that journey, we’re removing several historical Dart language and SDK artifacts, including removing support for running without sound null safety. This makes Dart easier to learn, and enables us to evolve t
Javaのjava.util.Optionalは「nullかもしれない値」を上手に取り扱うためのクラスです。Java 8で追加された、まだ比較的新しいクラスです。 「え、このメソッドって戻り値がnullになることがあるの?」ということは、Javaプログラマなら一度は経験があると思います。そういう時に限ってnullチェックを忘れてしまって、バグを作り込んで怒られてしまうのです…。 Optionalを使うと、そういうミスを事前に防ぐことができます。値がnullかもしれないと意識できますし、nullだった場合にありがちな処理も、大変簡単に書けるのです。 この記事では「Optionalってなにそれ? おいしいの?」な人向けに、Optionalの使い方についてお伝えします。 ※この記事のサンプルは、Java 10の環境で動作確認しています。 1.Optionalはnullかもしれないと伝えるものOp
Null 許容の有効なコンテキストの場合、コンパイラによってコードの静的分析が実行され、すべての参照型変数の "null 状態" が判断されます。 "null 以外": 静的分析によって、変数の値が null 以外であることが判断されます。 "null の可能性あり": 静的分析では、変数に null 以外の値が割り当てられていることを判断できません。 これらの状態を使用すると、null 値を参照する可能性がある場合にコンパイラから警告が生成され、System.NullReferenceException がスローされます。 これらの属性により、引数と戻り値の状態に基づいて、引数、戻り値、オブジェクト メンバーの "null 状態" に関するセマンティック情報がコンパイラに提供されます。 API にこのセマンティック情報の注釈が適切に付けられていると、コンパイラからより正確な警告が生成され
はじめに こんにちは、経営管理クラウドを開発するログラスのエンジニアの@Yuiiitotoです。 会社全体で色々なアドベントカレンダーにお邪魔させていただいております。 今回は、PostgreSQLのAdvent Calendar 2021の1つの記事として出しています。 PostgreSQLのNull許容外部キーの使い所について はじめにいっておくと、弊社ログラスではNull許容外部キーについてはよく使っています。 使い所は基本的に 0..1対0..N の関係性のときです。 猫は野良猫がいるので飼い主がない場合があります。その場合、猫は飼い主IDを持っていません。 飼い主は猫を複数飼うことができます。また猫を飼っていない飼い主もいます。 このときcatsテーブルのowener_id(飼い主ID)をnullbleにすることで飼い主のいない猫(野良猫)を表現することが可能です。 この場合のテ
Written by Bob Nystrom July 2020 Null safety is the largest change we've made to Dart since we replaced the original unsound optional type system with a sound static type system in Dart 2.0. When Dart first launched, compile-time null safety was a rare feature needing a long introduction. Today, Kotlin, Swift, Rust, and other languages all have their own answers to what has become a very familiar
今年もやってきた 今年入社してきた新人が会社のシステムにも、社内のメンバーとの関係にも慣れ、自分の意見を積極的に言えるようになってきました。 そして、毎年のように議論されているあの話が、再びやってきました。 そう、データベースのカラムの型に NULL を許すか どうかです。 私は何回もこの話を話しているので、私の現在の意見をまとめておきます。 最初に結論 意味として NULL が正しい場合、NULL を許すことは 正しい 。 しかし SQL の世界は時の流れが遅く、まだ NULL の扱いは 危険 なままだ。 NULL を許容することは 正しい 主に新人たちが、こちらの意見を取ります。 新人たちは、TypeScript や Rust といった、いわるゆ NULL 安全 な言語を学んだ状態で入社、 あるいは会社の仕事でコードを書いています。 彼らは NULL を恐れません。人類はもう NULL
Angularの AsyncPipe は非同期データをテンプレートバインディングするのに便利な機能だが、実は実装当初からずっと大きな問題を抱えている。それが「初期値null問題」だ。 本稿ではAsyncPipeの初期値null問題とその根本的原因を解説し、この問題を解決するための新しい非同期データバインディングのあり方を論じる。 AsyncPipeの仕組みを理解する一般的なAngularアプリケーションを作る上でいまやAsyncPipeは必ず使われるものと言っても過言ではない。Observable型のデータを購読し、そのスナップショットをデータバインディングするために多用される。 基本的な使われ方は次のような形だ。 @Component({ selector: "app-root", template: ` <div *ngIf="source$ | async as state"> {{
はじめに 本記事は第一回関数型プログラミング(仮)の会における発表内容の詳細です。 関数型言語において、Maybe/Option型データを外部データベースに保存する際やJSONに変換する際、NULL許容データに変換して扱われることが多いです。 しかしながら、Maybe/Option型とNULL許容データは細かい点で異なるため、注意してデータ変換を実装しないと思わぬバグを生むことになります。 そこで本記事では、Maybe/Option型をNULL許容データに変換することに対して、形式検証の視点から考察していきます。 また、Haskellによる実装例もありますので、コードを確認したい方はそちらも参考にしていただけると幸いです。 形式検証による視点 形式検証を考える際に必要なのは、プログラムの仕様を論理式で形式的に記述することです。 今回は、まずデータ変換自体の数学的なモデルを考えて、その後、H
Apple Silicon (Apple M1チップ)のMac mini(macOS Big Sur)において、Android StudioでFlutterプロジェクトの他言語対応した文字列を取得する際に、画面上でエラーが表示されました。 Flutterプロジェクトの他言語対応した文字を取得する際に、実機もしくはエミュレーターの画面上で赤バックのエラーが表示されました。 NoSuchMethodError: The getter 'title' was called on null. Receiver: null Tried calling: title See also: https://flutter.dev/docs/testing/errors エミュレータ AndroidStudioのコンソール上は以下エラーが表示されます。 ======== Exception caught b
JavaScriptとの戦いの大部分は、undefinedとの戦いです。undefinedはあなたのプログラムに素早く忍び込み、全てを壊していくでしょう。 これはTypeScriptでも避けられません。undefinedになりうる値があれば、繊細なガラス細工に触れるときのように慎重に扱わなければなりません。 そんなundefinedとの戦いの中、ほんのちょっぴり役に立つ文法がJavaScriptに導入されたので、紹介したいと思います。 Optionalな値 コードを書いていると、「入力してもしなくても良い」値を扱いたくなる場合があります。例えば外部からデータをフェッチしてくる関数を作るときには、trueかfalseか未指定(undefined)を指定する「disableCache(キャッシュ無効化)」フラグが欲しくなるかもしれません。 そういったoptional(任意入力)の値を実現しよう
MySQLでNOT NULLかつデフォルト値を指定しているカラムへのNULLでのUPDATE時の挙動と厳格モードによる挙動の変化 ローカルのMySQLでは特定のカラムアップデート時にエラーが発生するが、他の環境ではエラーが発生しないということが起きました。原因が分かるまで少し手こずったので、その内容と再現方法を書き残しておきます。 エラーとその解決方法 状況 NOT NULLかつデフォルト値を設定したTINYINTカラム(カラムAとする)を含むテーブルに対して、カラムAに対応した値にNULLを設定して1行アップデートを実行。環境Aでは実行成功し、環境Bではエラーが出て実行に失敗。 環境A: Aurora MySQL 5.7.12互換 sql_mode: 0(モードの設定なし) 環境B: MySQL 5.7.30 (mysql: 5.7) sql_mode: STRICT_TRANS_TAB
デバイスがIoT Coreに接続してデバイスシャドウを使っているとき、クラウドからの指示がdesiredに格納されます。 そして、デバイス側の状態がreportedに格納されます。 desired デバイスに対して要求する状態を格納する reported デバイスが現在の状態を格納する delta desiredとreportedが異なる場合に存在する(AWS自動付与) 正確な仕様はドキュメントを参照 クラウドがデバイスに対して依頼を行ったとき、デバイスはdesiredをnullにしようという話をしていきます。 デバイスシャドウの内容をシミュレーションしてみる 任意に光るLEDを持つデバイス(led-device)があるとします。このデバイスは下記のトピックをSubscribeしており、クラウドからの依頼を反映します。 トピック: $aws/things/led-device/shadow
twitterでなんどもつぶやいてるので多分知られているとは思うんですが、Web配信の技術という本を書きました。 せっかくなんで、なんでまたこんな本を書いたのかとかどういう流れだったのかみたいなのを簡単に書いてみようかなと そもそもどういう本なのか 非常にタイトルを決めるのが難しい本でした。 サブタイトルに「HTTPキャッシュ・リバースプロキシ・CDNを活用する」とあるようにいわゆるHTTPキャッシュの本なわけですが、コンテンツ配信の技術といえばCDNの印象が強く出ますし(本書はCDNの使いかたというわけではないです)、Web配信といえば動画ストリーム配信(VTuberの配信とか)を思い浮かべる人も多いと思います。 今考えればWebコンテンツ配信の技術とすればよかったかもと思いつつ、今度は長くなりすぎるのでなかなか難しいです。 ということでHTTPキャッシュを使ってWebサイトを高速化した
まずパッケージをnull safety版に移行する 依存関係の一番親のところからマイグレーションすることを推奨 自分のアプリのコードを先に変更してもパッケージのnull-safety対応で再修正が発生する可能性があるため全ての依存パッケージがnull-safety版になってからマイグレーションを行うことを強く推奨されている null-safety版のパッケージはnull-safety対応していないパッケージでも利用できる。 つまり自分のアプリがまだnull-safetyじゃなくてもコアライブラリだけ移行しておく。など徐々にnull-safety対応できる flutter pub outdated --mode=null-safety でアプリの依存パッケージが、null-safety対応しているか確認ができる [✗] 未対応 [✓] null安全対応 dart pub upgrade --
const nullables: (number | null)[] = [1, 2, 3, null, 4]; const nonNullables: number[] = nullables.filter( (item: number | null) => item !== null ); 実質的には Array.prototype.filter 内で item !== null でフィルタしているので nonNullables の要素はすべて non-null であるはずですが、 Type '(number | null)[]' is not assignable to type 'number[]'. Type 'number | null' is not assignable to type 'number'. Type 'null' is not assignable to t
@types/react-domで `ReactDOM.render` の第2引数 (container) はnullを許容しており、`document.getElementById` の返り値の型に合わせているそう。 しかしランタイムがnullを許容しているわけではなくnullを渡すと実行時例外になる。 TypeScriptを使っているのにこういうことが起きるのはなかなか悲しいので、nullを許容しないより安全なrender代替をexportするライブラリと、ReactDOM.renderを禁止するeslint pluginを作った。 GitHub - aereal/react-type-safe-render: Provides `safeRender` function that is more type-safe version of `ReactDOM.render` with
TypeScript のオブジェクト型について比較的触れられる機会が少ないこと (重箱の隅) をただ集めただけの記事です. オブジェクト型やその周辺に明るくなりたい人, または任意の重箱の隅が好きな人向け. 挙動の確認は 2022-11-06 時点の最新版である 4.8.4 で行っています. オブジェクト型 プリミティブ値との関係 別の「オブジェクト」型 空のオブジェクト型 interface を使ったオブジェクト型の定義 class を使ったオブジェクト型の定義 オブジェクト型のメンバー プロパティ Index Signatures メソッド Call Signatures Construct Signatures メンバーに対する修飾子 readonly 修飾子 オプショナル修飾子 部分型関係 keyof によるメンバーの列挙 Mapped Types オブジェクト型のキーを使った m
記事の趣旨 TypeScriptには、値がnullでないことを示すための、非nullアサーション演算子(Non-Null Assertion Operator) ! という構文があります。 これが、便利ですがあまり知られていないような気がしたので(自分も最近知りました)、使用例や ? との違いをまとめました。 使用例 前提 例として、あるinput要素が存在することが保証されていて、その要素にフォーカスしたい場合を考えます。 この時以下のように書くと型エラーが発生します。 document.getElementById('input').focus() // エラー: オブジェクトは 'null' である可能性があります。 これは、 document.getElementById の戻り値が HTMLElement | null となるためです。 オプショナルチェイニングの注意点 要素が存
はじめに 少し前にHTTP関連のRFCが改訂されましたね!(RFC91XX) このあたりの全般的な話は既に詳しい方々が触れていますので(HTTP 関連 RFC が大量に出た話と 3 行まとめ)、基本的にはそっちを参照すればよいかなと思うのですが、何が変わったかというと大規模なリファクタリングがされたといっていいでしょう。(もちろん同時にHTTP/3やCache-Statusなどの新しい仕様もふえています) とはいえHTTPのリファクタリングってなに?と思うことも多いと思うのでHTTP/2の例示をしてみます。 皆さんご存じの通りHTTP/2、HTTP/1.1のどちらにおいてもAccept-Encodingなどのフィールド(改訂でヘッダからフィールドに用語が変わりました)は同様に使えます。 要はセマンティクスは同じなわけですが、RFC7231ではHypertext Transfer Proto
序文 全国1千万の DB エンジニアの皆様、こんにちは。NULL撲滅委員会極東支部長のミックです。皆様におかれましては日々、DB の構築、SQL 作成、パフォーマンス・チューニング、本番データの入ったテーブルをいともあっさり DROP した新入社員の尻拭いと、獅子奮迅の働きにてチームを支えておられるであろうと存じます。さて、本日私が一筆啓上しましたのは、NULL撲滅基本宣言への皆様の参加を募りたく思ったからです。 NULL というこの面妖な怪物の質の悪いところは、最初は私たちの感覚に心地よく合致すると感じられるため、ごく自然にするっとシステム設計の中に忍び込んできて、気が付いたときにはシステムをどうしようもなく複雑で、非効率的で、直観に反する動作をするに至らしめ、開発も運用も困難なものにしてしまうところにあります。ゆえに、NULL のもたらす脅威から身を守るには、まず第一にその正体をよく知
Rustの公式ドキュメントにnullに関する興味深い記事("Null References: The Billion Dollar Mistake"(Null参照: 10億ドルの間違い))が引用されています。 Enumを定義する - The Rust Programming Language nullは、インタフェースにおける双方の合意として取り得る値とするか、しないかがいつもあいまいになってしまう点が問題。ある変数の型を見てもnullを取り得るかは明示されていないにも関わらず、人によって「nullを考慮すべき」「nullは取り得ない」の二つの状態が混在してしまう。たとえ、同じ人が双方のコードを書いていたとしても。 ScalaにおけるNull型のクラス階層における位置付けと、nullの代入 https://docs.scala-lang.org/tour/unified-types.htm
すでにレコードがあるテーブルにデフォルト値を設定せずにNOT NULL制約をつけたカラムを追加しようとすると、追加したカラムのレコードの値をNULLにする訳にはいかずエラーになってしまします。 これらに対応するには一度デフォルト値を指定する方法と、値をプログラム側で変更する2つの方法がありそうなのでSQLとRailsのmigrationで試してみました。 一度デフォルト値を指定する デフォルト値、NOT NULL制約を指定したカラムを追加 default値の設定を外す この方法はアプリケーションを動かしながら変更できるという利点があるので、この方法で十分な場合はこの方法を使うと良いと思います。 SQL ALTER TABLE users ADD group_id int DEFAULT 1 NOT NULL; ALTER TABLE users MODIFY group_id int(11
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く