「const」を含む日記 RSS

はてなキーワード: constとは

2022-01-01

anond:20220101145248

正直動けばいいと思うので、現状でも問題ないと思うけれどちょっとだけ気になった点。

$$使ってる時点で、デベロッパーツール前提なのは分かるけど、 javascriptで動かしたいのか、デベロッパーツールで動かしたいのか、どっちつかずな書き方になっている。

$$('.hatena-star-inner-count').map(a => a.click());
let data = {};
Array.from($$('.entry-comment-contents')).forEach(x => {const userName = x.querySelector('.entry-comment-username a').href.split('/')[3];const comment = x.querySelector('.entry-comment-text').innerText;const stars = Array.from(x.querySelectorAll('.list-star-container a.hatena-star-star')).map(y => y.href.split('/')[3]);data[userName] = [comment, stars];});
console.info(Object.entries(data).map(x => { return ['|', `b:id:${x[0]}`, '|', x[1][0], '|', x[1][1].join(','), '|'].join(' '); }).join("\n"));

デペロッパツールだけで動くだけでいいなら、3行目のArray.fromがなくても動く。多分、forEachをmapに書き換えても動く。個人的にはforEachに統一したいけど、そこは好みレベル問題だと思う。

$$('.hatena-star-inner-count').map(a => a.click());
let data = {};
$$('.entry-comment-contents').forEach(x => {const userName = x.querySelector('.entry-comment-username a').href.split('/')[3];const comment = x.querySelector('.entry-comment-text').innerText;const stars = Array.from(x.querySelectorAll('.list-star-container a.hatena-star-star')).map(y => y.href.split('/')[3]);data[userName] = [comment, stars];});
console.info(Object.entries(data).map(x => { return ['|', `b:id:${x[0]}`, '|', x[1][0], '|', x[1][1].join(','), '|'].join(' '); }).join("\n"));

逆に、javascriptで動かしたいなら1行目と3行目はquerySelectorAllに書き換えれる。

document.querySelectorAll('.hatena-star-inner-count').forEach((a)=>{a.click()});
let data = {};
document.querySelectorAll('.entry-comment-contents').forEach(x => {const userName = x.querySelector('.entry-comment-username a').href.split('/')[3];const comment = x.querySelector('.entry-comment-text').innerText;const stars = Array.from(x.querySelectorAll('.list-star-container a.hatena-star-star')).map(y => y.href.split('/')[3]);data[userName] = [comment, stars];});
console.info(Object.entries(data).map(x => { return ['|', `b:id:${x[0]}`, '|', x[1][0], '|', x[1][1].join(','), '|'].join(' '); }).join("\n"));

これも好みの問題だけど、途中のconst宣言は一回しか使ってないので、宣言せずにそのまんま入れてもいいんじゃないかと思った。

document.querySelectorAll('.hatena-star-inner-count').forEach((a)=>{a.click()});
let data = {};
document.querySelectorAll('.entry-comment-contents').forEach(x => {data[x.querySelector('.entry-comment-username a').href.split('/')[3]] = [x.querySelector('.entry-comment-text').innerText, Array.from(x.querySelectorAll('.list-star-container a.hatena-star-star')).map(y => y.href.split('/')[3])];});
console.info(Object.entries(data).map(x => { return ['|', `b:id:${x[0]}`, '|', x[1][0], '|', x[1][1].join(','), '|'].join(' '); }).join("\n"));
|<<

2021-08-16

anond:20210816122630

でもよー、それJavaScriptだろ?

const sode = [];  // 袖が存在しない!
const swing = sode.every(it => it.canSwing); // 振れるだろ?
console.log(swing); //=> true(振れるぜ)

だぜ。

2021-08-05

クマをわらわらさせたい

anond:20210803181833

aa ʕ•̫͡•ʕ•̫͡•ʕ•̫͡•ʕ•̫͡•ʕ•̫͡•ʕ•̫͡•ʔ

じゃなくて

aa ʕ•̫͡•ʕ•̫͡•ʔ•̫͡•ʔ•̫͡•ʕ•̫͡•ʔ•̫͡•ʔ

にしたい

javascript:(function (d, lowerThan, count) {
  const MinimumRequiredLength = 33;
  let currentCount = count();

  const elem = d.querySelectorAll(".bookmarkadd-comment-form")[0];
  if (!elem) {
    return;
  }

  if (lowerThan(count(), MinimumRequiredLength)) {
    if (elem.value.slice(-1) !== " ") {
      elem.value += " ";
      currentCount += 1;
    }
  }

  if (lowerThan(count(), MinimumRequiredLength)) {
    const kumas = ['ʕ•̫͡•', 'ʔ•̫͡•'];
    const indexes = '001101';
    for (let i = 0; i === 0 || (lowerThan(currentCount + i * 5, MinimumRequiredLength) || currentCount + i * 5 === MinimumRequiredLength); i++) {
      elem.value += kumas[indexes[i % 6]];
    }

    elem.value += 'ʔ';
    elem.dispatchEvent(new Event("input"));
  }
})(document,
  function(a, b) { return Math.floor(b / a) !== 0 },
  function() { return Number(document.querySelectorAll('.js-bookmarkadd-comment-count')[0].innerText) || 0 }
); //add bear

こういう、特定URL特定bookmarklet を呼び出す extension とか欲しい。これは用途に合わないけれど、クマを消すやつは自動で実行されてほしいものだろうし

2021-08-03

はてブコメント時に、自動で最小限のクマを足すブックマークレット

追記

クマが30匹程度では建設的と判定されないことがあるようなので、そんな時は

const MinimumRequiredLength = 30;

の部分を変えてみてください。

その際は、ドラッグし直すのでなく、

追加済みのブックマークレット右クリック→「編集」で、30の部分だけ書き換えればOKです。

 

追記ここまで

 

 

https://anond.hatelabo.jp/20210803012020

に刺激を受けて作りました

 

id:new3 さんのコメント

https://b.hatena.ne.jp/entry/4706344345181168386/comment/new3

で、書き込み時の自動クマ補完について書かれてたので、それを実装しました。

 

インストール方法

以下の文字列選択して、Chromeブックマークバードラッグしてください。

javascript:(function () {
  const MinimumRequiredLength = 30;

  const currentCount = Number(document.querySelectorAll(".js-bookmarkadd-comment-count")[0].innerText);
  if (Math.floor(MinimumRequiredLength / currentCount) !== 0) {
    const elem = document.querySelectorAll(".bookmarkadd-comment-form")[0];
    if (elem.value.slice(-1) !== " ") {
      elem.value += " ";
    }

    const loopNum = Math.ceil((MinimumRequiredLength - currentCount) / 5);
    for (let i = 0; i !== loopNum; i++) {
      elem.value += "ʕ•̫͡•";
    }

    elem.value += "ʔ";
    elem.dispatchEvent(new Event("input"));
  }
})();

「_5)」みたいな変な名前で追加されるので、右クリック→「編集から好きな名前に変えてください。(addBearとか)

 

使い方

はてブコメント書き込み画面でブックマークレットクリックしてください。

30文字を超えるように、自動的にクマで補完されます

 

これで追加したクマを、コメント一覧画面で削除するためのブックマークレットは、

javascript:(function () {
  document.querySelectorAll(".entry-comment-text").forEach(function (e) {
    e.innerText = e.innerText.replace(/[ʕ•̫͡•ʔ]+$/, "");
  });
})();

です。

セットでお使いください。(名前はremoveBear?)

 

解説

 

誰向け?

私はクマで埋めることはしないのですが、埋めたい人もいるでしょうから、道具としてはあればよいと思いました。

 

クマで埋めてる人は、コメント直前に毎回クマコピペして、

最後クマだけ左頬のパーツを変えて……、など10秒くらい掛けてると思うのです。

その間、「ああ……またこんな作業をして……私ったら承認欲求の塊なのかしら、いやらしいわ」と自己嫌悪してたら可哀想なので、

少しでもネガティブ時間が短くなるよう、活用してみてください。

このブックマークレットを使えば、作業を1秒に短縮できます

 

はてブ仕様が元に戻ったり、さらに変化したりするかもしれないので、過渡期の現象として楽しんでます

中国の「上有政策、下有対策」の日本版みたいなものです。

2021-05-31

https://github.com/kokorohamoe/OpenProfile/blob/master/700_sample/Java/Jurina/reader.cpp

とてもシンプルコード

int main(int argc,const char*argv[]){

int v;

char buffer[1024];

while(1){

printf("input\n");

scanf("%s%d",buffer,&v);

if(strcmp(buffer,"print")==0)

fprintf(stderr, "public class base{\n"

"public static void main(String[] args){\n"

"int i = %d;\n"

"System.out.println(i);}}\n",v);

}

return 0;

}

2021-04-19

https://b.hatena.ne.jp/entry/s/qiita.com/Yametaro/items/621bfd8c894f8fd36539

このクッソキモイネタいつまでやってんだよ腐れチー牛油豚ども

https://www.google.com/search?q=site%3Aqiita.com+%E3%83%91%E3%83%91

5歳娘「パパのReact、めっちゃいね!」

5歳娘「パパ、余分なpropsいっぱい書くんだね!」

4歳娘「パパ、具体的な名前をつけないで?」

5歳娘「パパ、レンタルサーバ契約しないで?」

5歳娘「パパ、変なAPIを作らないで?」

5歳娘「パパ、型はドキュメントだよ?」

5歳娘「パパ、依存性を注入して?」

6歳娘「パパ、プロジェクトフォルダを見つけるのに何時間

4歳娘「パパ、懐かしいJavaScript書いてるね!」

4歳娘「パパ、constしか使わないで?」

5歳娘「パパ、型ガードって何?」

0歳娘「パパ、型を作る関数はないの?」

4歳娘「パパ、Promiseやasync/awaitって何?」

4歳娘「パパ、実行時エラーの出ないフロントエンド言語って

4歳娘「パパ、そんなときクロージャが役に立つんじゃない

4歳娘「パパ、具体的な名前をつけないで?」

3歳娘「パパ、関数カリー化して?」

0~6歳なのはテメェの頭脳だろカス

2021-01-23

anond:20210123105915

const array1 = [1,2,3,1,3,5];

const reducer = (accumulator, currentValue,idx) =>{

if(!(currentValue in accumulator)){

accumulator[currentValue]=[idx];

}else{

accumulator[currentValue].push(idx);

}

return accumulator;

};

console.log(array1.reduce(reducer,{}));

何だせっかく考えたのに

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

からコピペを改変)

2020-10-30

お願いだからセンスの無い人はプログラマにならないで下さい

プログラミングセンスです。センスの無い人がプログラマになると、他のすべての人に迷惑がかかります。だからセンスの無い人は絶対プログラマにならないで下さい。

プログラミングセンスが無い人や、プログラミングをやったことの無い人は、知識を得たり経験を積んだりすれば、誰でも「良いプログラマ」になれると思っているようですが、無理です。

というのも、センスの無いプログラマ問題は、知識経験の不足ではないからです。センスの無いプログラマの救いようの無い問題は「頭がおかしいこと」なのです。

題材は何でもいいのですが、具体的なコードを見た方がイメージがつきやすいと思いますので、とりあえず以下の問題を考えます

問題

住民リストが与えられるので、背の低い順に男女ペアにしたリストを作って下さい。ただし、男女の数は同数であるします。

コード

ふつうの人は、難しく考えずに以下のようなコードを書きます

const makePair = (persons) => {
  const males = persons.filter(person => person.sex === MALE)
  const females = persons.filter(person => person.sex === FEMALE)
  const compareHeight = (a, b) => a.height - b.height
  males.sort(compareHeight)
  females.sort(compareHeight)
  return males.map((male, idx) => [male, females[idx]]) // 男女の数は同数
}

この例はJavaScriptなので高階関数を使っていますが、仮にそういう機能が無かったとしても、

というコード構成は大きく変わらないでしょう。

一方、センスの無いゴミプログラマは、以下のような名状しがたきコードを書いてきます

function pair(psns) {
  var i = -1;
  var cnt = 0;
  var flg = psns[0] && psns[0].sex;
  var j = -1;
  var tmp = null;
  for(i = 0; i < psns.length; i++) {
    //console.log('■■■■■■■■■■■■■■■■■■■■ BEGIN ■■■■■■■■■■■■■■■■■■■■')
    //console.log(psns, 'i=' + i, 'cnt=' + cnt, 'flg=' + flg);
    if(psns[i].sex == flg) {
      //console.log('cnt: ' + cnt + '->' + (cnt+1));
      cnt++;
    } else {
      j = i - cnt + 1;
      //console.log('swap ' + i + '<-->' + j);
      tmp = psns[j];
      psns[j] = psns[i];
      psns[i] = tmp;
      i = j - 1; // <- 理由は分からないが、i = jだと上手くいかない(by XXXX)。
      cnt = 0;
      flg = flg == MALE ? FEMALE : MALE;
      while(j > 1) {
        if(psns[j].height < psns[j-2].height) {
          //console.log('swap ' + j + '<-->' + (j-2));
          tmp = psns[j-2];
          psns[j-2] = psns[j];
          psns[j] = tmp;
        }
        j -= 2;
      }
    }
    //console.log(psns, 'i=' + i, 'cnt=' + cnt, 'flg=' + flg);
    //console.log('■■■■■■■■■■■■■■■■■■■■ END ■■■■■■■■■■■■■■■■■■■■')
    //console.log('')
  }
  for(i = 0; i < psns.length; i++) {
    //console.log('■■■■■■■■■■■■■■■■■■■■ BEGIN ■■■■■■■■■■■■■■■■■■■■')
    j = Math.floor(i / 2);
    //console.log(psns, 'i=' + i, 'j=' + j);
    tmp = psns[i];
    if(!(i % 2)) {
      psns[j] = [null, null];
    }
    if(tmp.sex == MALE) {
      psns[j][0] = tmp;
      psns[j][1] = psns[i+1];
    } else {
      psns[j][0] = psns[i+1];
      psns[j][1] = tmp;
    }
    i++;
    //console.log(psns, 'i=' + i, 'j=' + j);
    //console.log('■■■■■■■■■■■■■■■■■■■■ END ■■■■■■■■■■■■■■■■■■■■')
  }
  psns.splice(psns.length / 2, psns.length);
}

こんなコードメンテナンスは御免被りたいです。一見して配列の要素を入れ替えていることが分かるだけで、実装を全て読まなければ(いや読んでも)処理の意図が全く分かりません。また、たとえば「i = j - 1」が間違って「i = j」などと書かれていてバグを起こしたとしても、原因を突き止めるのは困難を極めます

さて、このコードは具体的に何がいけないのでしょうか。長すぎることがいけないのしょうか。変数名が分かりにくいのがいけないのでしょうか。引数破壊的に変更しているのがいけないのでしょうか。不要コメントが残っているのがいけないのでしょうか。よく見ると、ソート処理で車輪の再発明をしていたり、「j」や「tmp」などが場所によって意味が違うカメレオン変数になっていたりしますが、それがいけないのでしょうか。どれも正しいですが、それらを逐一直したところで、本質的解決にはならないでしょう。

後者コードはもはや「ここを直したら良くなる」とかいレベルを超えています。たしかに、問題を具体的に挙げることはできます。このコードの致命的な問題が、凝集度の低さと、単一責任原則(SRP)違反にあるのは間違いありません。しかし、後者コードを書いてくる人に、

住民リストを男女に分ける処理や、リストソートをする処理、2つのリストをまとめる処理は、この問題とは独立して意味のある操作から、別の関数として抽出しましょう。その方がコードの見通しがよくなるし、一部の処理を修正したときの影響も小さくなるし、単体テストも書きやすくなります

なんて言ったって聞く耳を持たないでしょう。

そもそも、こういうコードを書く人は、この処理自体を「pair」なんて関数抽出すらしません。まだこの問題では入出力のフォーマットが明確に定義されているので、他人が1から書き直せますが、実際のプロダクトでは、無数の副作用を起こす数千行のコード迷路を彼の脳内フォーマットデータが通るわけです。もちろん、テストコードなんてありません。

まり、指摘をしても絶対に直らないのです。いくら言語の優れた機能ベストプラクティスを紹介しても、馬の耳に念仏。それらの利点を理解できるだけの脳みそが足りていないのです。

どうして、同じ処理を実装するのに、ここまでの違いが生じるのでしょうか。

これは、プログラミング技術問題ではありません。既に述べた通り、ふつうの人なら、特定機能の有無とか知識の程度にかかわらず、ふつうコードを書くのです。なぜなら、ふつうの人にはそちらの方が楽だからです。つまり、前者のコード別に何か卓越した技術を身につけた結果書けるようになるものではなく、まともな感覚さえ持っていれば、プログラミング初心者にとっても前者のコードの方が書きやすいのです。

まり後者のようなコードを書いてくる奴というのは、現実世界の捉え方が常人とは著しくずれているのです。要するに、「頭がおかしい」のです。この病気はもう直りません。だからセンスの無い人は絶対プログラマにはならないで下さい。

2020-08-19

anond:20200819122438

GitHubのRadarってやつしか見てないけど

あれ日時処理がグダグダなんだよね

/600してたのがいつの間にか消えてたり(600って一体何だったんだろう)

MilliSecとってたりSecとってたり

‐14がハードコードされてるかと思えばconstにも設定されてたり


関数型言語ってやつ?が好きな人が書いたコードなのかな?

泥臭く書いたらいいだろうにモダンな書き方しようとしてバグを埋めてるみたいな印象を持った

2020-08-01

anond:20200801234448

function* fizzBuzzGenerator2() {
  const g = fuzzBuzzGenerator()
  let i = 1;
  while (true) {
    const val = g.next().value
    if (i % 15 === 0) {
      yield 'FizzBuzz'
    } else {
      yield val
    }
    i += 1
  }
}

2020-05-22

どちらの副作用のほうが大きいか

意図しないstd::moveがない=だけのmoveコンストラクタが呼ばれる場合

コピーコンストラクトと使い方に差がある

という弊害constなのにmoveコンストなのに所有権を失うというコンストとは違う動作が行われる)である という もとからconst には前コンスト 後コンストの問題はあるが 同じような弊害を生むのではないか

難しいけど ごめんなさい。

2020-04-05

[][][]VORZE A10サイクロンSA遠隔操作するアプリを作った

内容が内容なので匿名ダイアリーに投げ捨てる。

Bluetooth端末で動作する。(CC0 License)

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>A10 Cyclone SA easy controller</title>
</head>

<body>
  <span id="status">initializing...</span>
  <script>
    let status = document.querySelector('span#status');
    let device, characteristic;
    const connect = async _ => {
      try {
        device = await navigator.bluetooth.requestDevice({
          filters: [{ services: ['40ee1111-63ec-4b7f-8ce7-712efd55b90e'] }],
        });
        status.textContent = 'connecting...';
        let server = await device.gatt.connect();
        let service = await server.getPrimaryService('40ee1111-63ec-4b7f-8ce7-712efd55b90e');
        characteristic = await service.getCharacteristic('40ee2222-63ec-4b7f-8ce7-712efd55b90e');
      } catch (e) {
        status.textContent = `failed to connect: ${e.message}`;
        return;
      }

      document.addEventListener('pointermove', evt => {
        evt.preventDefault();
        let y = evt.y / innerHeight * 2 - 1;
        let data = Math.abs(y) * 0x7f | (y < 0 ? 0x80 : 0x00);
        characteristic.writeValue(new Int8Array([0x01, 0x01, data]));
      });
      status.textContent = 'swipe up and down to move';
      document.removeEventListener('click', connect);
    }
    document.addEventListener('click', connect);
    status.textContent = 'tap screen to connect';
  </script>
</body>

</html>

2020-03-20

anond:20200320104602

className *Param = NULL;

int main(int argc,const char *argv)

{

Param = new className();

return 0:

}

 

こういうコードのほうが実は合理的

というか、より簡単にかけるように言語を工夫してるんだから

難しく書いている方が間違い 理屈ちゃんとある

この場合プログラム内部にはかかれておらずカーネル側が処理してくれるから しらないとわからねいけど

カーネルの動きを知ってる場合メモリリークではなく こうしたほうがよいとちゃんとわかる

2020-02-12

anond:20200212143037

MS技術はやめておいた方がいい。…と自分では思っている。

TypeScriptで出力したJSは、MSブラウザしかサポートしない、という未来は十分に予測できる。

それにどういう方針でbetter JSを作ろうとしたのか不明だが

    const color = switch (input) {
        case 1 => 'red'
        case 2 => 'blue'
        default => 'green'
    }

(どうでもいいが、増田スーパーpre記法使えないのか?)

こんな具合の「値を返すswitch」のような文法拡張すら実現できていない。

技術力が窺い知れる。

国内の勢いのあるスタートアップの中で、MS技術を使う会社は本当に「皆無」だし

うちの会社も、MSフリーで固めてる。

2019-10-24

anond:20191024141214

const char text[] = "勝手解釈"; // FIXME: イコール勝手解釈を入れてもかまわないという記号ではないのでバグ

2019-10-03

早期リターンを禁止されるつらさ

転職した会社で早期リターンが禁止されている。

正確に言うと、misraCを踏襲し、関数内ではreturnは末尾に1つだけ、という制約が設けられている。

この他にも関数ポインタ禁止等も色々あるが、早期リターンを禁止されるのは本当に困る。

早期リターンによってどれだけ気持ちよくコーディングできるか分かっていない。

もうこの後の行は読まなくていいんだ、という精神的安堵感。

これをもうこの会社では得られない。

関数ポインタ引数const禁止程の破壊力がある。

地獄のような10重以上のネスト地獄・・・

律儀に守ることによる可読性の低下の方が問題ではなかろうか。

2019-09-06

エラーメッセージの読めない人間がいる」ってよく嘲笑対象にされるけど

例えば以下の文章メッセージで出力されてた時にエラー根本原因が即わかる奴っているのかよ…

[ts]

型 '{ inputs: SymbolicTensor; outputs: (SymbolicTensor | Tensor<Rank> | Tensor<Rank> | SymbolicTensor)[]; }' の引数を型 'ContainerArgs' のパラメーターに割り当てることはできません。

プロパティ 'outputs' の型に互換性がありません。

型 '(SymbolicTensor | Tensor<Rank> | Tensor<Rank> | SymbolicTensor)' を型 'SymbolicTensor | SymbolicTensor' に割り当てることはできません。

型 '(SymbolicTensor | Tensor<Rank> | Tensor<Rank> | SymbolicTensor)' を型 'SymbolicTensor' に割り当てることはできません。

型 'SymbolicTensor | Tensor<Rank> | Tensor<Rank> | SymbolicTensor' を型 'SymbolicTensor' に割り当てることはできません。

型 'Tensor<Rank>' を型 'SymbolicTensor' に割り当てることはできません。

型 'Tensor<Rank>' にプロパティ 'sourceLayer' がありません。

const image: tf.SymbolicTensor

2019-08-30

jsコード

以下のコードってどういう意味? imagesって変数探してもそのスコープにおらんのやけど。

const {images: testImages, labels: testLabels} = data.getTestData();

2019-06-08

プログラマ愚痴

大きなシステム開発プロジェクトアサインされて、プログラミングしている。

言語C++なんだけど、構造体同士を比較するのに、memcmp() 使ってて、みんなもそれを使えっていう。

中身を一個一個比較するより早いけど、構造体には内部にギャップができてるかもしれなくて、なので、

そのギャップの部分だけが違う二つの構造体は、「中身が異なる」と判断されてしまうのよね。

から構造体を作って各要素に中身を代入する前に構造体の領域全体を memset() でゼロで塗りつぶしましょう

ってことになってて、毎回それをやるんだけど、塗りつぶし忘れがないかどうか心配だったりする。

構造体メンバとして bool operator==(const T &other) を作るか、あるいは関数として

bool operator==(const T &obj1, const T &obj2) を作って、どちらにしても中身を一個一個比較するべきだとおもうんだよね。

一回書けば次から比較的楽に比較書けるのにな。

2018-12-23

anond:20181223184745

この辺になってくると初心者の人は面倒かな?

解説をつければかなりわかりやす

基本的な書き方


class mystring
{
public:
	char *buffer;
	mystring() 
	{
		buffer = (char*)"";
	}

	void operator = (const char*t)
	{
		int len = strlen(t);
		buffer = new char[len + 47];
		strcpy(buffer, t);
	}

	void operator = (const mystring&src)
	{
		int len = strlen(src.buffer);
		buffer = new char[len + 47];
		strcpy(buffer, src.buffer);
	}

	mystring& operator + (const char*t)
	{
		int len = strlen(buffer);
		int len2 = strlen(t);
		char *buffer2 = new char[len + len2 + 47];
		strcpy(buffer2, buffer);
		strcpy(buffer2+len, t);
		buffer = buffer2;
		return *this;
	}
	mystring&  operator + (const mystring&src)
	{
		return ((*this) + src.buffer);
	}

};


STL化したもの

class mystringV
{
public:
	std::vector<char> buffer;
	mystringV()
	{
		buffer.resize(2);
		buffer[0] = ' ';
		buffer[1] = NULL;
	}

	void operator = (const char*t)
	{
		int len = strlen(t);
		buffer.resize(len+1);
		strcpy(&buffer.at(0), t);
	}

	void operator = (const mystringV&src)
	{
		buffer = src.buffer;
	}

	mystringV& operator + (const char*t)
	{
		int len = strlen(&buffer.at(0));
		int len2 = strlen(t);

		buffer.resize(len + len2 + 47);

		strcpy(&buffer.at(0) + len, t);

		return *this;
	}
	mystringV&  operator + (const mystringV&src)
	{
		return ((*this) + &src.buffer.at(0));
	}

};

考察

様々な話はあるものSTLの方を使えば

いろんな事をプログラマにかわってライブラリがやってしまうということ

どうなんだろうね。

この辺は あまりしっかり おしえてもらえないところではある。

でも プロならみんな 知っている

anond:20181223183225

初心者

class mystring
{
public:
	char *buffer;
	mystring() 
	{
		buffer = (char*)"";
	}

	void operator = (const char*t)
	{
		int len = strlen(t);
		buffer = new char[len + 47];
		strcpy(buffer, t);
	}

	void operator = (const mystring&src)
	{
		int len = strlen(src.buffer);
		buffer = new char[len + 47];
		strcpy(buffer, src.buffer);
	}

	mystring& operator + (const char*t)
	{
		int len = strlen(buffer);
		int len2 = strlen(t);
		char *buffer2 = new char[len + len2 + 47];
		strcpy(buffer2, buffer);
		strcpy(buffer2+len, t);
		buffer = buffer2;
		return *this;
	}
	mystring&  operator + (const mystring&src)
	{
		return ((*this) + src.buffer);
	}

};

	mystring my_space_org;
	for (int i = 0; i < 8; i++) {
		mystring space;
		space = my_space_org + " ";
		printf("%sHello world\n", space.buffer);
		my_space_org = space;
	}

anond:20181223152531

技としてはナイスだけど応用は厳しいよね

	const char *message = "        Hello world\n";

	for (int i = 0; i < 8; i++) {
		printf("%s", message + 8 - i);
	}

サンプルとしては、使いにくい書き方

ハローワールドループだけでも

結構遊べる

あなたは どんな 書き方が好き?

2018-09-07

anond:20180907112858

こんな感じかね。

http://jsfiddle.net/Lhankor_Mhy/jc2wkhes/

<video id="target" type="video/mp4" src="http://etc.dounokouno.com/testmovie/h264/testmovie-480x272.mp4" width="480" height="272" autoplay autobuffer></video>
<div id="_4">4


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