icon

松屋のマレーシア風牛肉煮込み~ルンダン~を食べたけど、味は異国の香辛料系の、角煮が入ったカレーって感じだった。
うまいけど、味が似てて具も入り過ぎな位入ってるチキンマサラカレーの方が良かったな。

icon

思ってたんと違ったけど、ぜったいできる!!にちょっとだけポプテピを感じた

Attach image
icon

いつもちょっとムズムズしながらwebサイトのパス無しのドメインまででアクセス出来るwebページの事をトップページと呼んでる・・

icon

Twitterで、ツイートが省略されてShow moreってリンクがある場合があるけど、あれって課金で長文書いてんのかと思ったら、そうじゃない場合もあるな。
開くの面倒だから、いちいち省略しないで欲しい。スクロールだけで見たいんだ

icon

イベントのアンケートで割と設問がある、1カ月の趣味に使うお金っていつも思うけど難しい・・・
使う時は使うけど、使わない時は使わないから、今月趣味に何かつかったっけ・・・?ってなる

icon

松屋も高くなったなぁ

icon

Twitterのインプレッションゾンビ、ほんと減らないなぁ。見かけたやつはほぼ全てブロックしてるのにまだ居るし、しかも最近作ったアカウントって訳でも無い事が多い。どうなってんだ

icon

[注意喚起]ブラウザ互換ライブラリ「Polyfill\.io」がドメイン名ごと中国企業に売却、CloudflareとFastlyが代替となる配信を開始 - Publickey

一応polyfill.ioにリクエスト出さない様に設定しておくか。どうせpolyfillが必要になる様な古いブラウザは使ってないし。
新しすぎる機能でpolyfillが必要な場合もあるかもだけど、まぁ一旦は止めておこう

Web site image
[注意喚起]ブラウザ互換ライブラリ「Polyfill.io」がドメイン名ごと中国企業に売却、CloudflareとFastlyが代替となる配信を開始
icon

このままぼーっとしててもだし​:redbull:​飲んじゃうか

icon

今日はやりたい事があるんだけど、眠い

icon

身体固くなってる&暖かいの効果で眠い

icon

外歩いても寒くないむしろ暑い!

icon

でもなー値なんだよなぁ。せっかくカスタム型やstructで、値オブジェクト的なのを値で作れるんだから、値で渡したいし、簡潔に書きたいんだよなぁ

icon

-- go.mod --
module sample

go 1.22
-- foo/foo.go --
package foo

import "fmt"

var _ Bar = (*bar)(nil)

type Bar interface {
	Value() int
	Verify() error
}
type bar struct {
	baz int
}

func (b *bar) Value() int {
	return b.baz
}
func (b *bar) Verify() error {
	if b.baz <= 0 {
		return fmt.Errorf("arg must be more than 1 but %v given", b.baz)
	}
	return nil
}
func NewBar(i int) (Bar, error) {
	subject := &bar{i}
	err := subject.Verify()
	if err != nil {
		return subject, err
	}
	return subject, nil
}
-- main.go --
package main

import (
	"fmt"
	"sample/foo"
)

func main() {
	fmt.Println(foo.NewBar(9))
	fmt.Println(foo.NewBar(0)) // arg must be more than 1 but 0 given
	//fmt.Println(foo.Bar{9})  // invalid composite literal type foo.Bar
	//fmt.Println(foo.Bar{})   // invalid composite literal type foo.Bar

	var bar foo.Bar
	fmt.Println(bar) // nil

	//bar, _ = foo.NewBar(9)
	//fmt.Println(*bar) // invalid operation: cannot indirect bar (variable of type foo.Bar)
}
https://go.dev/play/p/jATJHDP-5WT

package外でtypeとして使うのはinterfaceにして、structの方は非公開にすれば、New関数を使わず直接初期化される事も無いし、ゼロ値で初期化される事も無い。
とはいえ、なかなかに大袈裟だし、interfaceが公開で中に非公開のstructだから、必然的にポインター・参照渡しになってしまう。これは別に実害はないけど。

一応これで、存在してるならvalidな事が確定は出来そうだからメリットはあるけど、大袈裟で冗長なデメリットの他に、なんか落とし穴とかあるだろうか・・・?

Web site image
Go Playground - The Go Programming Language
icon

-- go.mod --
module sample

go 1.22
-- foo/foo.go --
package foo

import "fmt"

type Bar struct {
	bar int
}

func NewBar(i int) (Bar, error) {
	if i <= 0 {
		return Bar{}, fmt.Errorf("arg must be more than 1 but %v given", i)
	}
	return Bar{i}, nil
}
-- main.go --
package main

import (
	"fmt"
	"sample/foo"
)

func main() {
	fmt.Println(foo.NewBar(9))
	fmt.Println(foo.NewBar(0)) // arg must be more than 1 but 0 given
	//fmt.Println(foo.Bar{9}) // implicit assignment to unexported field bar in struct literal of type foo.Bar
	fmt.Println(foo.Bar{}) // 1未満は不正だがゼロ値でbar = 0になってしまう
	var bar foo.Bar
	fmt.Println(bar) // 1未満は不正だがゼロ値でbar = 0になってしまう
}
https://go.dev/play/p/oR2CRhGdnax

やっぱりstructの非公開フィールドといえど、ゼロ値で初期化する形で
0

という値が入ってしまうなぁ。そうだよなぁ

Web site image
Go Playground - The Go Programming Language
icon

オブジェクト指向は必要なのか / Is object\-oriented needed? \- Speaker Deck

スライドだから端的すぎて良く分からなかったページもあるけど、プログラミング考古学的な観点もあって助かる

Web site image
オブジェクト指向は必要なのか / Is object-oriented needed?