万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    deletingLastPathComponentやappendingPathComponentのDart版

    最後のパスを削除 deletingLastPathComponent

    /hoge/bar/fuga.dart/hoge/bar/ になる。最後に'/'はあるっぽい

    最後にパス追加 appendingPathComponent

    /hoge/bar/fuga.dart ↓"bar.dart" /hoge/bar/fuga.dart/bar.dart になる。

    /はよしなに

    これのDart版がほしい

    import 'package:path/path.dart' as _path;
    
    extension StringExtension on String {
      // SwiftのdeletingLastPathComponent()的な処理
      // 最後に/はない
      String deletingLastPathComponent() {
        return _path.dirname(this);
      }
    
      // SwiftのappendingPathComponent()的な処理
      String appendingPathComponent(String additionalPath) {
        // 元のパスから最後の/消す
        final origin = stripTrailingSlash();
        // 追加用は先頭に/つけておく
        final modifiedAdditionalPath = additionalPath.ensureLeadingSlash();
        return '$origin$modifiedAdditionalPath';
      }
    
      // 先頭に/つけておく
      String ensureLeadingSlash() {
        if (!startsWith('/')) {
          return '/$this';
        }
        return this;
      }
    
      // 最後の/消しておく
      String stripTrailingSlash() {
        if (endsWith('/')) {
          return substring(0, length - 1);
        }
        return this;
      }
    }