RedshiftとPostgresのCollate
Redshiftソート順
例えば、ORDER BY 式と、MIN、MAX、および RANK などの関数は、ロケール固有の文字を考慮に入れないデータのバイナリ UTF8 順序付けに基づいて結果を返します。
https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_collation_sequences.html
Postgres
--encoding=UTF-8 --locale=C
locale=Cにすれば、binary UTF8順になるので、似た環境で開発できる
オブジェクト指向プログラミング
## 特徴と謳っているもの
- カプセル化
- 継承
- ポリモーフィズム
## 実態
### カプセル化
C言語においても、ヘッダーファイルでの宣言でカプセル化可能。また、クラスのメンバについてはprivateにしても、外部からファイルでの確認ができるため、カプセル化はC言語の方が高い
### 継承
C言語でも関数ポインタを使って実現できていた。
ただ、多重継承は少し大変。
### ポリモーフィズム
こちらも関数ポインタを参照して可能だが、抽象インターフェースだけではなく、具象インターフェースも知る必要があるので、依存度が高い。
大変。
## まとめ
オブジェクト指向によって得られるもので非常に重要なのは、ポリモーフィズムの抽象インターフェースによってレイヤードアーキテクチャのコンポーネント同士の結合度を下げること(DIP)、またDIでテストをしやすくすること。
構造化プログラミング
制御構造(実装)
goto文によるソフトウェアの破壊を危惧して、エドガー・ダイクストラが提唱した。
- 順接
- 上から順に実行
- 分岐
- If Statement
- 反復
- While Statement
構造化設計(設計)
サブルーチンとデータ構造の無数の組み合わせからプログラムを組み立てること
また、これらの分割によって凝集度や結合度などの考えも生まれている。
単語
goto文
ラベル名に強制移動
#include <stdio.h> int main() { int count = 0; loop: count++; if (count >= 10) goto end; goto loop; end: return 0; }
サブルーチン
メインルーチンから呼ばれるコード群
(method, function, procedure...)
package main func main() { subRoutine() } func subRoutine() { fmt.Println("subRoutine") }
凝集度
クラスやパッケージ、モジュールの責任範囲の明確さ
凝集度が高い = 各パッケージが独立しており、お互いの強調度合いが高い
凝集度が低い = 各パッケージの依存や共通性が多い
結合度
あるモジュール同士の密接度