「ソースコード」を含む日記 RSS

はてなキーワード: ソースコードとは

2021-07-02

初心者から中級者になるためのプログラミングのコツ

変数や構文などのプログラミングの基礎は覚えた人向けに、ソースコードを書くときのコツを紹介していきます。どれも今日から実践できるものばかりです。他のプログラマと差をつけることができる技術ですので、ぜひ意識するようにして下さい。良い子はまねしないで下さい。

変数名は短く

プログラムで使う変数名は可能な限り短くしましょう。

理想は、aやxなどの一文字です。ただし、これだけだと26文字しか使えないので、a1, a2, ...のように連番でグルーピングすると良いです。

また、変数宣言使用箇所が離れた場合に、変数の型がすぐに分かるように、たとえばint型であればi1, i2, ...、string型であればs1, s2, ...のように命名すると、読む人に親切で自分ミスしにくくなります

変数名を長くするのは、以下のデメリットがあるため、絶対にやめましょう。


なるべく関数を作らない

多くのプログラミング言語には、クラス関数といった機能がありますが、これらは基本的ライブラリ提供者などが使う想定の機能であり、一般プログラマが使うのは好ましくありません。したがって、クラス関数はなるべく使わないようにして下さい。

関数を作ると、以下のデメリットがあります

不要関数を作らないためのテクニックには、以下のようなものがあります

まず、関数引数に「フラグ」を渡し、関数内部で処理を切り替えれば、1つの関数複数の処理をすることができます

function f(i) {
  switch(i) {
    case 1:
      // i = 1のときの処理
      break;
    case 2:
      // i = 2のときの処理
      break;
    case 3:
      // i = 3のときの処理
      break;
    // ...
  }
}

この方法は、以下に述べる「変数寿命を伸ばす」効果もあります。つまり、この関数内で宣言された変数は、すべての処理で共通して使用することができます

クラス不要関数を作らないようにするには、「継承」を用います複数クラスで用いる関数定義したクラスを1つ作っておき、そのクラス継承すれば、新しいクラス関数定義する必要はありません。

理想的には、プログラム内のすべての関数を同一のクラス定義し、それを継承するべきです。そのようなクラスは俗に「神」と呼ばれ、その利便性からプログラマからはこの上なく尊ばれています

class God {
  f1() {
    // 関数1
  }
  
  f2() {
    // 関数2
  }
  // ...
}

class C1 extends God {
  // 何も書かなくても上の関数が使える!
}

class C2 extends God {
  // 何も書かなくても上の関数が使える!
}
// ...

変数寿命を長くする

変数宣言する場所によって、ソースコードのどの範囲から参照できるかが決まっています。この範囲が広いことを、「変数寿命が長い」と言います

たとえば、以下のコードのaは、関数定義の外側からは参照することができません。

function f() {
  var a = 1;
  return a;
}

一方、以下のコードのaは関数の内外どちらからでも参照することができます

var a = 1;

function f() {
  a = 2;
  return a;
}

変数寿命を長くするのは、プログラマの腕の見せ所です。

せっかく作った変数がすぐに死んでしまうのは、非常にもったいないです。ソースコードの表面には現れませんが、変数を作ったり捨てたりするのには、計算コストがかかります。したがって、寿命の短い変数を作りすぎてしまうと、プログラムが遅くなってしまます

また、変数寿命が長いということは、変数をたくさん作らなくても、1つの変数を色々なところで利用できるということであり、とても便利です。たとえば、上記の前者のコードでは、関数の外部からaの値を参照したくなっても、参照することができません。後者のように書いておけば、プログラムのどの箇所からでも、aの値を参照したり、更新することができます。したがって、変数寿命を長くするとプログラムを変更しやすくなります。つまり保守性が上がります

例外を潰す

例外とは、プログラムが予期しない処理をしようとした場合に、プログラムの実行を停止し、呼び出し元にエラーを通知する機能です。たとえば、「test.txt」というファイルを開こうとしても、そのファイル存在しない場合は、例外となります

例外が発生すると、プログラムが停止してしまうため、非常に困ります。したがって、プログラマ例外をきちんと処理しなければなりません。

ほとんどのプログラミング言語には、例外処理のための機構があります。たとえば、以下のような構文です。

try {
  // 例外が発生し得る処理
  // ex. ファイルを開く
}
catch (e) {
  // 例外が発生したときに、実行する処理
}

例外への対処は実はとても簡単です。是非ここで覚えて下さい。上記のような機構のある言語であれば、catch節の中身を何も書かなければ、例外が発生しても、何事もなくプログラム動作を続けます

try {
  // 例外が発生し得る処理
}
catch () {}

全ての例外を潰せば、決して不慮の動作で停止することのないプログラムを作ることができます。ですから例外が発生し得るコードは、積極的上記try-catch構文を用いて、例外を潰すようにしましょう。

2021-06-22

GitHub作成したFlaskアプリHeroku連携させる」といふ表現

PythonフレームワークであるFlaskのソースコードが讀む必要があつて、公式リポジトリを調べる爲に「Flask GitHub」で検索したんですよ。

さうしたら、【Heroku】GitHubで作成したFlaskアプリをHerokuに連携させる - Qiitaと云ふ記事が目に留まつたんですね。

これはおかし言葉遣ひだな、と思ひました。だつて、GitHubソースコードホスティングサーヴィスであって、「Flaskアプリ」を作る機能は持つてゐないのですから。だから、「GitHub作成したFlaskアプリ」などと云ふもの存在しない。

ところが、ふと後から思ひ返して見ると、もしかしたら筆者の意圖は違ふんぢやないか、と思つたんですね。つまり、「GitHubで」は「作成した」にかかるんぢやなくて、

GitHubで(作成したFlaskアプリを)Heroku連携させる

のやうに、「GitHubで」は「連携させる」を修飾するんぢやないか、と思つたんです。

この「作成した」は、何かのtoolを用ゐて作つたと言つてゐるのではなく、英語「You」のやうに、不特定の人の動作を表してをり、そして、「GitHubで〜連携させる」は、「GitHubのDeploy機能を用ゐて連携させる」と云ふ意味だと考へれば、辻褄が合ひます

より分かり易く書けば

GitHubで、作成したFlaskアプリHeroku連携させる

となります日本語つて難しいですね。

SIerエクセル思考する

彼らにとって重要なのはソースコード管理連携してドキュメントやissueを管理できることではない。

彼らにとって重要なのは文章の開始位置を矢印キーで変えられることであり、マス目に色を塗れること。それだけである

2021-06-20

そういえば入社して数ヶ月で入ったプロジェクトで、eclipseソースコードちょっと編集して保存したんだよね

そしたら勝手フォーマットされて、結構多めの差分が出たんだよね

その差分出たところ、BPさん(?)がこの前コミットしたところだったんだよね

で「修正してくださりありがとうございます」とDMが来て、その後に「できればここはこうしてください」みたいな若干怖いこと言ってきたんだよね

その時は勝手フォーマットされてたことも含め意味からなくて『うわー勝手にこの方のコードいじっちゃったようわーなんか間違ったっぽいし』って思ったんだけどさ、

 

今思えば同じフォーマッター共有してないだけじゃねぇか

そのBPも同じフォーマッター入れろや

2021-06-02

anond:20210602214104

あくまでもC++で考えているが

while(true)

goto最適化できないコンパイラって、まともに使われているやつであるの?

インタプリタならわかるけどコンパイラだよねぇ?

 

というか、一般的にはこの程度はコンパイラができることが常識から

ソースコードレベルで期待するPythonじゃないかC++ならな

というより ほぼ無意識レベルで そういうのを期待しながら書いている

当然 最適化なしなら おっしゃるとおり

 

というより

どういうふうに最適化されるかを読みながら書いていくのがC言語という言語だろと言う話

学術言語ではなく、実用のための言語から

学術的より現実界優先

Rustのソースコードを読むには高い言語能力必要

いまだにまったくよめん

2021-05-31

anond:20210531221609

独自言語を作ってJava中間コードを吐くのではなく

独自言語を作ってJavaソースコードを吐き出せばいい これがJurina言語のコンセプトモデル

jurina

cat filename.jurina

print "Hello world";

という命令ファイルから受け取ったら

public class filename{

public static void main(String[] args){

System.out.println("Hello world");

}

}

と出力するプログラムをjurinaと名付けるとする

cat filename.jurina

int i=1;

print i;

public class filename{

public static void main(String[] args){

int i=1;

System.out.println(i);

}

}

ものすごく単純なPythonっぽい独自言語

Javaに置き換えて出力するだけのJava プリプロセッサである

さて、このJurina言語JAVA VMで動くと思うか?

   

言いたいことVMを解析して、OPコードを吐くコンパイラを作ろうとしていたが

そもそもコンパイラが作れるならJavaソースコードを吐いてしまえば良いことに気がついた

2021-05-29

これだから定型業務

一口業務と言っても定型業務と非定型業務がある。

このうち定型業務COBOLが主力だった時代からどんどんシステム化されてきた。

したがって、今の今までシステム化の手が入っていないのは殆どが非定型業務

この非定型業務が本当に面倒で、基本設計レベルから収拾がつかなくなるのだ。

流石に今の今までシステム化埒外に置かれてきただけのことはあるというか。


とにかくたった一つの業務を取っても、その中で場合分けの分岐収束がやたら多い上に、複雑怪奇に入り組んでいて、フローチャートにまとめられない。

このフェーズで簡潔なフローチャートにできないもの絶対ソースコードに落とし込めないので、本当に悩ましい。

というか「あんなこともある」「そういえばこういう場合もあるんだよね」と、業務担当者からヒアリングすればするほど理解が進むどころか、むしろわかりにくくなる。

しかも全部ケースを出し切ったと思って要件を整理しているとあら不思議、「あれ?この場合は…」と新たな疑問が何個も湧いてきて、再確認という手戻りが起きる。

そしてそのタイミングで「衝撃の新事実」が発覚し、それがその業務だけでなく他の業務にも大いに影響する話だったりするため、横展開を余儀なくされる。

そんなことが延々と続くため、そもそも設計作業が半永久的に終わらない。

しかも、そんな業務が何十個とあるんだぜ?

こんなもん、一体どうシステム化しろって言うんだ!


しろ、実務を担当している末端の人たちの柔軟性の高さが異常とも言えるわけで、よくこんなわけのわからん仕事を混乱せずにできるなあと感心するのだが。

anond:20210528030347

その通り。激烈に不利。

英語コマンドとかソースコードとか全部日本語に置き換えてみるとハンデの大きさがよくわかる。

2021-05-10

鍵垢のスクショ貼るのは合法なの?

GitHubソースコード流出させた件で当人が鍵垢で損害賠償についてツイートしてたけど、それをスクショして公開するのは合法なのか?

少なくとも道義上やったらいけないことなのは大半が同意してくれると思う。

から思ってたけどDMを平気で晒し相手小馬鹿にするのもおかしい。

この辺りの法整備はいつされるのか?そもそも違法なら誰か止めてやれよ。

2021-05-05

anond:20210505112817

え、エスパーすると、ソースコードの行数で成果を測るような会社にいたの?それはやめて正解なのでは

2021-05-03

ソースコード勝手に書き換えられて

それを治して

といわれたから、会社をやめざるを得なかった。奴隷では当時はなかったから、今は奴隷だけど

だけどなんで、他人ソースコード勝手に書き換えて

それを直せと言ったのかはわからない

よほどサディストだったのだと思う

2021-04-27

anond:20210427195818

試験したり、外部モジュール確認コードを書いたりして

現状がどういう実装仕様になっているか

確認して

どういう風に変えようか、検討すると言う意味

現状と、オリジナル仕様が違うことというのは様々な理由であることなので

文章ではなく、現状に合わせこむ

 

ソースコードを読むというのには、様々なテストコードを書いて

現状の仕様がどうなっているか調査するというのを含むと言う意味

anond:20210427195625

仕様書もなければ平然とバグがある状態なので(単体がまともに書かれてなかった)

ソースコード読んでも正じゃないのよ…

anond:20210427194514

ソースコードを読めばいいじゃん

しろそういうときに、

ソースコードを読み込む、方がメインで

上司に聞いたりという発想がほぼない

2021-04-26

anond:20210425022947

共通言語たるドメインモデルを、そのままコードと1対1対応しなければならない、という思い込みや風潮。

既存のWAF(Web Application Framework) の利点を潰してどうする…」

こういう誤った思い込みエンジニアにさせているのは、ドメイン駆動設計の原典であるエリックエヴァンスドメイン駆動設計」が、いか抽象的な内容で、ある意味では哲学的であったかを、明示するものでは無いか

プログラムとはメタファーであり、現実を、もしくはそれに準ずる写像的な世界観を、コードに忠実に再現するものでは必ずしも無いと考える。この記事増田は「過度な抽象化」とも書いているが、プログラムというか、そもそも言語のもの物事の全てを表象できるものではなく、ある一側面の一イメージしか切り取れない不完全なものだし、それ自体問題ではない。現実ソフトウェアの溝を、ユーザーエンジニアの溝を、ドメインソースコードの溝を、いかにして埋めるかというのが、ドメイン駆動設計の本質だし、その埋め方についてはエリックエバンスは一例を示しているに過ぎない。EntityやValueObjectなど、必要なら使えば良いし、不要なら使わなければ良いのだ。ただし、元々何が問題なのか、問題だったのかという点について、いかにして向き合うかが肝要であり、それは技術論や方法論の話ではない。

ドメイン駆動設計の記事を書いたり、勉強会で発表をしている人間は、原典やそれに付随するドキュメントの内容を、無批判に信奉し、そのようにしなければならないという強迫観念に追われているのではないかそもそも、本当に理解しているか怪しいし、不安から教科書の内容にしがみつこうとするのだろう。さらにこの手の連中は、昨今のCQRSやイベントソーシングマイクロサービスなどとも絡めて話をし出すから、タチが悪い。「ドメイン駆動設計はこの手の技術スタックと相性が良い」という言葉を何度も見かけたが、技術的な方法論はそもそも無関係だったはずだし、そうやって安易に結びつけてしまうからユーザーが置き去りになって来たんじゃねーのと、暴言でも吐きたくなる。問題本質はどこにあったのかを、聖典の内容や、流行り廃りの技術とは切り離して、エンジニアは三思九思すべきだ。

別にこうあらなければならないという法律や決まりは無いし、好きにやれば良い。モデルと1対1にならなければ、分割する事を選択するのも一つの向き合い方だ。ドメイン駆動設計の信者にゃんにゃん写真でも撮られて、ばら撒くと脅迫されているのであれば勿論話は別だ。恥ずかしい写真魚拓されたくなければ、とりあえずEntity、ValueObject、Repository、Service(笑)位は最低限、用意するのが身のためだろう。

自分の頭で考えて、自分責任判断するという当たり前の事に立ち返りたいものだ。ドメイン駆動設計という盲目的な宗教からいかにして抜け出すかが今後のエンジニア課題だろう。

追伸

増田ドメイン駆動設計が大好きです😘

2021-04-23

anond:20210423170113

艦これ 炎上」でググったらソースコード流出の件が出てきたけど

これって「艦これ炎上」としてカウントして良いの?

2021-04-13

[]4月13日

ご飯

朝:サンドイッチ。昼:パン。夜:人参玉ねぎシメジ豆腐たまごスープ納豆

調子

むきゅーはややー。お仕事は、超頑張った。

「複雑なコードがいくつも絡まった機能バグ発生、しか再現性無し」というワクワ案件

今までの不調や不満はどこへやらで仕事満喫した。

しかった。

バグと向き合ってる時の脳味噌が広がってシステム自分が混ざっていく感覚気持ちよかった。

ソースコード書くのも好きだけど、バグ対処の時はソースコードよりも広い部分も気にするからより脳味噌広がる感じが好き。

無事、問題箇所を発見でき、再現方法を見つけられた。

直し方も三案ほど出した。再現方法普通に操作する分には中々起きないと思うので放置って線もありそう。まあこの辺は予算とか瑕疵責任も絡むので、僕が頑張れるところはひと段落

○プリコネ

ダンジョンむっず。ニューイヤーキャルいないから諦めるわ。

ウマ娘

キングヘイロー三冠を狙ってプレイしてるんだけど、かなり上振れてくれて皐月賞2位ダービー1位菊花賞1位が出来て、超惜しかった。

ただこんだけ上振れても出来ないなら、もうちょい因子を強化してからこの遊びはすることにしよう。

2021-04-11

factory_botのソースコードを読んでいるんだけど、レシーバコロコロ変わって読むのがむずい。

どうすれば、クラスの責務や設計思想を読み取ることができるようになるんだろう。全然わからん

ログイン ユーザー登録
ようこそ ゲスト さん