私のブログ記事への推定読み込み時間の追加


評価された読書時間を示すブログは、料金を通して増加したクリック率の上方に得ることができます.私は静的に構築されたブログの記事のために自分のスタックをロールバックするので、私はそれがしようと私のblog pageにこの便利なメトリックを追加する楽しい運動であると思いました.

スタック
一般に、HTMLテンプレートはカスタムデータを受け取り、定義済みのテンプレートでマージします.私の現在のブログのポストの設定は、ほとんどのマルクダウンのような構文を使用して、あらかじめ書かれたHTMLファイルにコンテンツを挿入する単一のJavaプログラムです.詳細はあまり詳しく説明しませんが、ブログ投稿と内部リンクの両方を再生成すると言います.例えば、「推奨された投稿」セクションの下にあります.あなたが私が私自身のテンプレートシステムを作った方法のポストを見たいと思うならば、コメントで知らせてください!
各ブログ記事を除いて、それはまた、私のブログのページがポストプレビューを表示するためにタップするJSONファイルを生成します.これをすることによって、私は事実上、WordPressサイトのような何かと同じくらい敏感である純粋に静的なサイトを持つことができます.全体的に、スタックは、サイトジェネレータとしてJava、およびフロントエンドテクノロジとしてHTML、CSS、およびJavaScriptから成ります.

実際の数値の取得
読書時間の計算は、おそらく非常に簡単です-ちょうどあなたの記事の単語の数を取るし、約265の単語のaverage reading speedによって分割します.しかし、コードによるブログに関しては、この数は劇的に変化することができます.コードが非常に濃い場合でも、いくつかの単語を1分または2分かかることができます.しかし、過度に詳細なコードは、単に上にスキミングできます.私は、単に1行あたりの1行の等価物を割り当てることによって、コードを1行だけカウントすることにしました.
これは非常に小さいかもしれませんが、コードはしばしば単一の文字を含まない多くの行を持っていることを覚えておいてください.また、読みやすくてアトミックになるように自分のコードを書きますのですなわち、各々の線は短くて、甘いで、理解できなければなりません.そのうえ、私は数が265から200まで目標速度を減らすことに決めました.なぜ250ではないか.私は知りません.手で任意の数は、数式を読む時間を計算するのは簡単です.
      readingTime = (numWords + linesOfCode) / 200;

コードは決して単純ではない
一方、Javaファイル内の式をどこかにプロットして、すべての仕事を持っているのはとても役に立つでしょうが、それはとても簡単すぎるでしょう.参照してください、私は繰り返しコードを抽出し、機能をテストすることを目標として、Javaのテンプレートプログラムを書いた.この目的のために、それぞれの機能を持ち、必要な変数をパラメータとして渡し、最終的な製品となるテンプレートStringを返す機能がたくさんあります.
Javaは1つの値を返すことができるので(複数の値を返すために配列を使用することを除く)、返される必要のある他の情報を引数として渡し、内部関数の内部で変更する必要があります.しかし、Javaのint sはpassed-by-value(よく技術的にeverything isですが、我々は便利に無視します).これは単にwordCount変数へのポインタを渡すことができず、内部関数の内部で更新することができないということです.
私がこれまでにこれまでにした最も大きい解決を入力してください.intを関数に渡す代わりに、長さ1のint配列を通過します.Javaはこのリファレンスを渡し、この単一要素配列の最初の要素の値を変更することができます.私は約3層ほどのネストを持っているので、私の機能は少し似ています.
      public String buildHTML(String filename) {
        // ...
        int[] wordCount = new int[1]; // pass by "reference"
        String content = buildContent(fileScanner, wordCount);

        readingTime = wordCount[0] / 200;

        // ...
      }

      public String buildContent(Scanner fileScanner, int[] wordCount) {
        // ...
        else if (lineArray[0].toUpperCase().equals("P")) {
          content += buildParagraph(lineArray[1], wordCount);
        } else if (lineArray[0].toUpperCase().equals("CODE")) {
           content += buildCode(fileScanner, wordCount);
        }

        // ...
      }

      public String buildParagraph(String pData, int[] wordCount) {
        // ...
        wordCount[0] += content.split(" ").length; // actually setting the data

        //...
      }

      public String buildCode(Scanner fileScanner, int[] wordCount) {
        // ...
        while (fileScanner.hasNextLine()) {
          wordCount[0]++; // one "word" per line

          // ...
        }

        // ...
      }
ご覧の通り、我々は首尾よくその価値をチェーンに渡して、それが戻るとき、それを読むことができます.Javaのような値によるパスでは悪くない.最後の結果を見るために、私のblog pageを見て、ポストのどれかのトップを見てください.
私はこの機能を追加する方法についての聴聞会は、いくつかの迷惑なバグに取り組むか、あなたが持っている興味深い機能のアイデアを実装することを示唆する助けになりました.あなたが私がちょうど1つのスーパー小さいものを修理しているように、ぎこちないフィックスを引く必要があったならば、コメントで知らせてください!
いつものように、私はこのようなコンテンツのために従うことを忘れないでください.私は現在dev.toMediumに書いています、そして、どちらのプラットホームのあなたの支持も非常に有り難いです.私も、membershipは、ここでは、記事やリソースの全体の束に排他的なアクセスの早期プレビューを得ることができる設定している.また、あなたが特にこのポストを楽しんだならば、buying me a coffee .次回まで!