0

私は画像操作ライブラリの開発を開始し、1 つのクールなパッケージでテストと検査を行うために Scrutinizer を使用することにしましたが、全体的なスコアを低下させている統計の一部を制限するためにコードを最適化する方法がわかりません。

以下に示すコードには、「条件: 6」があり、「B」評価にプッシュされます。コードに特別なことは何もありません。パーミッションの欠落や無効なディレクトリの可能性をチェックし、それに応じて例外をスローするため、コードの反応をまったく異なるものにせずにスコアを下げることは非常に困難です。

/**
 * Writes the image to a writable source
 *
 * @param int $compression Compression level 0-9, defaults to 9
 *
 * @throws \StandardExceptions\IOExceptions\FileNotWritableException
 * @throws \StandardExceptions\IOExceptions\DirectoryNotFoundException
 * @throws \StandardExceptions\IOExceptions\DirectoryNotWritableException
 */
public function write($compression = 9)
{
    $path = $this->getPath();
    $directory = $path->getPathInfo();
    if (file_exists($path->getPathname()) && !$path->isWritable()) {
        throw new FileNotWritableException();
    } elseif (!is_dir($directory->getPathname())) {
        throw new DirectoryNotFoundException();
    } elseif (is_dir($directory->getPathname()) && !$directory->isWritable()) {
        throw new DirectoryNotWritableException();
    }
    $options = [
        'png_compression_level' => $compression,
        'resolution-x' => $this->getDensity()->getDensity(),
        'resolution-y' => $this->getDensity()->getDensity(),
        'resolution-units' => $this->mapDensity($this->getDensity()),
    ];
    $this->getImage()->save($path, $options);
}

条件が 3 つしかないのに 6 つの条件がある理由がわかりません。そして、どうすればこれを下げることができるのかわかりません!

4

1 に答える 1

0

コードをさらに多くの関数に分割しようとしましたが、これによりコードが読みにくくなり、クラスに多くの役に立たない関数が作成されましたが、少なくとも機能し、コードの各ブロックで条件を効果的に 1 または 2 に減らすことができましたコードをどこでも「A」に引き上げます。

/**
 * Writes the image to a writable source
 *
 * @param int $compression Compression level 0-9, defaults to 9
 */
public function write($compression = 9)
{
    $this->checkFileIsWritable();
    $this->checkDirectoryExists();
    $this->checkDirectoryIsWritable();
    $options = [
        'png_compression_level' => $compression,
        'resolution-x' => $this->getDensity()->getDensity(),
        'resolution-y' => $this->getDensity()->getDensity(),
        'resolution-units' => $this->mapDensity($this->getDensity()),
    ];
    $this->getImage()->save($this->getPath(), $options);
}

/**
 * Checks that the path is valid and throws exceptions
 * if there is something wrong
 *
 * @throws \StandardExceptions\IOExceptions\FileNotWritableException
 */
public function checkFileIsWritable()
{
    $path = $this->getPath();
    if (file_exists($path->getPathname()) && !$path->isWritable()) {
        throw new FileNotWritableException();
    }
}

/**
 * Checks that the path is valid and throws exceptions
 * if there is something wrong
 *
 * @throws \StandardExceptions\IOExceptions\DirectoryNotFoundException
 */
public function checkDirectoryExists()
{
    $path = $this->getPath();
    $directory = $path->getPathInfo();
    if (!is_dir($directory->getPathname())) {
        throw new DirectoryNotFoundException();
    }
}

/**
 * Checks that the is writable
 *
 * @throws \StandardExceptions\IOExceptions\DirectoryNotWritableException
 */
public function checkDirectoryIsWritable()
{
    $path = $this->getPath();
    $directory = $path->getPathInfo();
    if (is_dir($directory->getPathname()) && !$directory->isWritable()) {
        throw new DirectoryNotWritableException();
    }
}
于 2015-07-14T18:53:32.740 に答える