0
0

【学習記録 20240731】

Posted at

リーダブルコード

名前が「ほかの意味と間違えられることはないだろうか?」と何度も自問自答する。

  • 積極的に「誤解」を探していく → クリエイティブになる

filter()

  • results = Database.all_objects.filter("yaer <= 2011")
    resultには2011より年が小さいすべてのデータが入っていると思うが、人によっては「year<=2011 ”ではない” オブジェクト」と読む人もいる。フィルターは何かを抽出するという意味だから。
選択するのであれば、select()にした方がよい。
除外するのであれば、exclude()の方がよい。

Clip(text, length)

段落の内容を切り抜く関数があったとする。
この関数名を見ただけでは、最初から数文字切り抜くのか、最後から数文字切り抜くのかが分からない。

#textの最後を切り落として、「...」をつける
上記のようなコメントがあったとする。
自分なら、最後からlength分だけなくなった後の文字列か何かが返されると考える。(remove)
でも人によっては、「最大length文字まで切り詰める(truncate)」と考える人もいる。
(ちなみに、truncateの意味は、「切り詰める」
truncateなら、Truncate(text, length)とすべき。
lengthも、文字数ならchar、バイト数ならbite、単語数ならwordにする。また、最大ならmax_を付けた方が分かりやすい。
max_charsとすると、Truncate(text, max_chars)

限界値を含めるときは min と max を使う

CART_TOO_BIG_LIMIT = 10
上記は、限界値を含めているのかわからない。限界値を明確にするときは、以下のようにすると良い。
MAX_ITEMS_IN_CART

範囲を指定するときはfirstとlastを使う

rubyでは範囲オブジェクトを作るときは、Range.new(1, 5)と書くが、これは1以上5以下を表現している。また、1..5も1以上5以下を表す。
対して、1...5は1以上5未満を表す。rubyに慣れていないとちょっとわかりにくい、これは。
リファレンス上で使用例は確認できなかったが、使えるならこっちの方が分かりやすいのでは。
Range.new( first = 1, last = 5 )
また、firstをminに、lastをmaxに変えてもわかりやすい。

Webを支える技術

Webを実現するコンピュータネットワーク

  • クライアントとサーバー
  • インターネット:インターネットサービスプロバイダーがいる
  • インターネットサービスプロバイダー:ISPやプロバイダーと略されることが多い。

インターネットの標準プロトコル

  • プロトコル:ネットワークに接続された機器同士が通信するときの、あらかじめ決められた共通ルールや手順。HTTPはWebコンテンツを送受信するためのプロトコル。
  • TCP/IP:インターネットにおける様様なサービスを実現するためのプロトコルの集まりのこと。HTTPもTCP/IPの一部。
    • HTTP:データ送受信用のプロトコル
    • FTP:ファイル送受信用のプロトコル
    • SMTP:電子メール "送信用" のプロトコル。Simple Mail Transfer Protocol
    • POP:メール "受信用" のプロトコル。Post Office Protocol

TCP/IP

TCP/IPは役割ごとに4階層に分かれる。

  • アプリケーション層:アプリケーションごとのやり取りを規定している。また、ネットワーク利用に適したデータ変換の役割も担う。HTTP,SMTP,FTP
  • トランスポート層:データの分割や品質保証を規定している。TCP,UDP
  • インターネット層:ネットワーク間の通信を規定している。IP,ICMP
  • ネットワークインターフェース層:コネクタ形状や周波数といったハードウェアに関する規定をしている。イーサネット、Wi-Fi
  • TCP/UDP:アプリケーション層のやり取りに応じて実際にデータの転送処理をしている。トランスポート層に位置する。データ送信は分割して行われる。TCPはデータ順序と欠落をチェックするが、UDPはチェックしない。UDPは通信の手続きが簡略化されており、効率よく通信が必要な動画ストリーミングなどで利用されている。TCPはコネクション型、UDPはコネクションレス型。

IPアドレスとポート番号

  • IPアドレス:住所のようなもの
  • ポート番号:IPアドレスは接続したいコンピュータを指定できるが、そのコンピュータが提供するサービスまでは指定できない。そこで、ポート番号でサービスを指定する。マンションでいうところの部屋番号。
  • Webサーバー(HTTP)は一般的にポート番号が80番と決まっている。

URLとドメイン

  • URL:スキーム名、サーバー指定、取得するファイルの指定
  • ドメイン:サーバー指定するときに、example.comのような文字列をドメインという。IPアドレスを人間が分かるように変換したものがドメイン。
  • http:80番、https:443番、ftp:20番(データ転送用)・21番(制御用)

DNS

  • ドメインとIPアドレスの変換:DNS(Domain Name System)、DNSサーバー。
  • IPアドレスの問い合わせ:URLにドメインが利用されている場合は、かならずDNSサーバーへIPアドレスの問い合わせを行っている。

HTTP

  • クライアントとサーバー間のやりとり:
    • URL入力
    • URLに基づいてWebサーバーに対してリクエスト送信(HTTP)
    • Webサーバーはリクエストを解析(HTTP)
    • Webブラウザはレスポンスを受け取る(HTTP)
    • Webブラウザはレスポンスを解析し、Webページとして表示する
      WebブラウザからWebサーバーへのリクエストでは、HTTP,TCP,IP,イーサネットプロトコルが利用される。

おまけ①:off-by-oneエラーについて

勉強中に、「off-by-oneエラー」という初見のエラーに遭遇した。古典的な、境界条件の判定に関するエラーのよう。

内容は、ループ処理で正しい回数より1回多い、もしくは1回少ない実行が実施された場合などに発生するもの。
原因は、プログラマーがカウントのスタートを1からにしてしまったり、数値の比較において未満と以下を混同してしまったりなどらしい。

詳細は下記をご参照。
https://ja.wikipedia.org/wiki/Off-by-one%E3%82%A8%E3%83%A9%E3%83%BC

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0