LoginSignup
0
0

More than 1 year has passed since last update.

小ネタ・覚え書き

Last updated at Posted at 2018-03-21

前書き

完全に個人的な覚書。雑記。
「こんなことはおそらく周知の事実」というようなことも追加していく

配列の宣言で変数が使える

ijk_in_data

int i = 5,
    j = 3,
    k = 2;

int data[] = {i,j,k};

dataの中身は{5,3,2}となる。
宣言された後は、i j k とは無関係なので、上の宣言に続けて

change_i
i=1;
printf("%d",data[0]);

としたら、出力されるのは1でなく5。

「参照値渡し」とか絡めながら補足

C(++),Java,C#では、基本的に変数は、中に入っている「値」を渡すようにしている。
プリミティブ型だとか値型だとか基本データ型だとか言われるものは、指定しない限り「値渡し」で考える。

「参照型変数」とか、「ポインタ」とか(これらふたつは別のもの)は「参照値」を「値渡し」する場合もある。
この場合、渡された参照値を上書きしない限りにおいて、参照先のデータにアクセスできる。

上書きした場合には、別のデータを参照することになる。
「ガベージコレクション」等と呼ばれる機能を有していない言語においては、メモリリークの原因となるので、
確実にメモリの解放をするように注意する必要がある。

「参照渡し」を行う場合では、値型でも参照型でも関係なく、該当する値の動向に気を配る必要がある。
一方で、より厳密なシングルトンを表現できるので、欠点ばかりとはいえないかな、とも思う。
詳細は別述するかもしれないし、しないかもしれない。

Javaでは参照渡しをサポートしていないので、厳密なシングルトンの作成は(多分)できない。

javaシングルトンについて

クラス外でオブジェクトを参照する変数を持ったまま、新しくインスタンスを生成するような動作を行った場合に、
以前作成したオブジェクトを確実に排除する手立てがない(多分)ため

...一応ほんとに作れないか、軽く調べた
JavaのSingleton実装方法5つとメリットデメリット使用場面とかいろいろ書いてみる
「リフレクションでアクセス可能」がちょっとよくわかんないけど
(リフレクションを使えばクラスのメンバをのぞき見できるそうな)
enumを使わないと厳密につくるのはムリよーってことらしい。
(enumで作ってるのキモいキモいって言ってるけど、本当にキモいな...)

戻り値を「参照で返す」機能を使った、多分厳密なシングルトンの作成例

一応他の人が記事にしてるのもあります。
デザインパターン・Singleton(シングルトン)パターンの実装

一応こちら、見ないで思いついたものです。
僕はぺぇぺぇなので、間違えてる可能性が限りなく100%なので、上記とかも見ようね。

C#で
class Singleton{
  private static Singleton InstanceHolder = null; // インスタンスを保持する

  public static ref Singleton getInstance(){
    if( InstanceHolder == null){           // インスタンスが未生成の場合のみ生成
      InstanceHolder = new Singleton();
    }
    return ref InstanceHolder;             // インスタンスを参照で(refで)返す
  }

  private Singleton(){ /* 生成時処理 */ }   // コンストラクタはprivate
}

ライブラリにある抽象クラスを継承して作るときに、
staticにしたかったんだけど、許されなかった(実態のあるなし考えたら当然)ので
仕方なくなんちゃってSingletonもどきにしたときは、
「同時には存在しないけど別のインスタンスを後から生成する可能性があった」ので、

public static ref Singleton renewInstance(){
  InstanceHolder = new Singleton();
  return ref InstanceHolder;
}

とか作って、getInstanceメソッドにはご退場願った

Oracle

登録しているストアドの内容を全出力する

SELECT REPLACE(REPLACE(TEXT, CHR(10)), CHR(9), '    ')
FROM USER_SOURCE
WHERE SUBSTR(REPLACE(TRIM(TEXT), CHR(9)), 1, 2) <> '--'
  AND LENGTH(TRIM(TEXT)) <> 1
ORDER BY TYPE
       , NAME
       , LINE
;

CHR(9): タブ文字
CHR(10): 改行文字
LENGTH(TRIM(TEXT)) <> 1 : 改行うざい死すべし
SUBSTR(REPLACE(TRIM(TEXT), CHR(9)), 1, 2) <> '--': どうせしょうもないコメント死すべし
ORDER BY TYPE: PACAKGEとPACKGE BODY で同じNAME(関数名他)なのでキーに必要

上記で出せば1列のタブなしになるので、TSV的に取り出せばそのまま.sqlな感じで読める。
CREATEとかはしないのでExportではない。ので、バックアップとしては良くない。

記事にするかも?

覚えてて、気が向いたらする

fseek関数のストリーム指定の引数にstdinを指定したらなんかいけた

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