te20

I’m a code folder – スティッチャー.io

(jp) =

これは、広告が表示される場所です。 代わりに、私の GitHub スポンサー ページを紹介したいと思います。 あなたが定期的な読者で、私のコンテンツが役に立っている場合は、1 回限りまたは毎月のスポンサーシップを検討できます。 このブログまたは私のニュースレターで専用の広告掲載を探している企業の方は、[email protected] までメールでお問い合わせください。

初めて見たときは奇妙に見えると思いますが、ちょっと聞いてください。私はコード フォルダーです。

class TwitterSyncCommand extends Command

    protected $signature = 'twitter:sync --clean';

    
    private Collection $mutes;

    public function handle(Twitter $twitter)   

    public function syncFromList(Twitter $twitter): void   

    public function syncFromSearch(Twitter $twitter): void   

    private function storeTweets(array $tweets, TweetFeedType $feedType): void   

    private function shouldBeRejected(Tweet $tweet): ?RejectionReason   

ほとんどの場合、ほとんどのコードを非表示にします。 コード ブロックを簡単に表示および非表示にするためのキーボード ショートカットがあります。 ファイルを開くと、すべてのメソッドと関数の本体がデフォルトで折りたたまれています。

理由? 私は、数十行のコードを一目で理解できる超人的なスピードリーダーではありません。 そして… 高さ 2 メートルのスクリーンもありません。

私はこれをすべて読んで理解することはできません—知っていますか?

class TwitterSyncCommand extends Command
{
    protected $signature = 'twitter:sync --clean';

    
    private Collection $mutes;

    public function handle(Twitter $twitter)
    
        $this->mutes = Mute::query()->select('text')->get();

        if ($this->option('clean')) 
            $this->error('Truncating tweets!');

            Tweet::truncate();
        

        $this->syncFromSearch($twitter);

        $this->syncFromList($twitter);

        $this->info('Done');
    

    public function syncFromList(Twitter $twitter): void
    
        do 
            $lastTweet = Tweet::query()
                ->where('feed_type', TweetFeedType::LIST)
                ->orderByDesc('tweet_id')
                ->first();

            $tweets = $twitter->request('lists/statuses.json', 'GET', [
                'list_id' => config('services.twitter.list_id'),
                'since_id' => $lastTweet?->tweet_id,
                'count' => 200,
                'tweet_mode' => 'extended',
            ]);

            $count = count($tweets);

            if ($count === 0) 
                $this->comment('No more new tweets');
             else 
                $this->comment("Syncing $count tweets from list");

                $this->storeTweets($tweets, TweetFeedType::LIST);
            
         while ($tweets !== []);
    

    public function syncFromSearch(Twitter $twitter): void
    
        do 
            $lastTweet = Tweet::query()
                ->where('feed_type', TweetFeedType::SEARCH)
                ->orderByDesc('tweet_id')
                ->first();

            $tweets = $twitter->request('/search/tweets.json', 'GET', [
                'q' => 'phpstorm',
                'since_id' => $lastTweet?->tweet_id,
                'count' => 200,
                'tweet_mode' => 'extended',
            ])->statuses;

            $count = count($tweets);

            if ($count === 0) 
                $this->comment('No more new tweets');
             else 
                $this->comment("Syncing $count tweets from search");

                $this->storeTweets($tweets, TweetFeedType::SEARCH);
            
         while ($tweets !== []);
    

    private function storeTweets(array $tweets, TweetFeedType $feedType): void
    
        foreach ($tweets as $tweet) 
            $subject = $tweet->retweeted_status ?? $tweet;

            $tweet = Tweet::updateOrCreate([
                'tweet_id' => $tweet->id,
            ], [
                'state' => TweetState::PENDING,
                'feed_type' => $feedType,
                'text' => $subject->full_text ,
                'user_name' => $subject->user->screen_name,
                'retweeted_by_user_name' => isset($tweet->retweeted_status)
                    
                    ? $tweet->user->screen_name
                    : null,
                'created_at' => Carbon::make($subject->created_at),
                'payload' => json_encode($tweet),
            ]);

            if ($reason = $this->shouldBeRejected($tweet)) 
                $tweet->update([
                    'state' => TweetState::REJECTED,
                    'rejection_reason' => $reason->message,
                ]);
            

            (new ParseTweetText)($tweet);
        
    

    private function shouldBeRejected(Tweet $tweet): ?RejectionReason
    
        if ($tweet->isRetweet() && $tweet->feed_type === TweetFeedType::SEARCH) 
            return RejectionReason::retweetedFromSearch();
        

        
        foreach ($this->mutes as $mute) 
            if ($tweet->containsPhrase($mute->text)) 
                return RejectionReason::mute($mute->text);
            
        

        
        if ($tweet->getPayload()->in_reply_to_status_id) 
            return RejectionReason::isReply();
        

        
        if (str_starts_with($tweet->text, '@')) 
            return RejectionReason::isMention();
        

        
        $language = $tweet->getPayload()->lang;

        if ($language !== 'en') 
            return RejectionReason::otherLanguage($language);
        

        return null;
    
}

特に 1 つの特定のメソッドを検索しているときは、そのコードをすべて見ると圧倒されます。

今、新しいファイルを作成すると、すべて問題なく、白紙の状態で、制御できます。 しかし、コードは急速に成長し、実際のプロジェクトでは白紙の状態ではなく、既存のファイルに作業が含まれることが多くなっています。 ですから、認知負荷を軽減する方法が本当に必要です。「一度にすべてを理解する」ことはできません。 だからこそ、私はコードの折りたたみがとても好きになりました。

慣れるまで1週間はかかります。 メソッド本体と関数を自動的に折りたたむように IDE を構成し、適切なキー バインドを割り当ててブロックを表示および非表示にします。 私はあなたに約束します、あなたはそれを好きになるでしょう。

次の投稿
最古のメガロドン化石は海の古い序列を示しています
前の投稿
Will Still – ゲーマーからフランスのトップ 10 チームのコーチへ

ノート:

AZ: 動物の世界、ペット、ペット、野生の自然に関するカテゴリー記事…
SP:スポーツカテゴリー。
New vs Ne: ニュースコラム。
Te: テクノロジー カテゴリ。
Gt:エンターテインメントカテゴリー。
Bt: 占い、星占い、超常現象、超常現象。
Ta:人生コラム。